读书人

Hotspot Internals in Action(七):

发布时间: 2013-03-10 09:38:39 作者: rapoo

Hotspot Internals in Action(7):处理器、指令与栈之2

3、程序的栈帧结构

一个过程调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。数据传递、局部变量的分配和释放是通过操纵程序栈来实现的。

IA-32程序用程序栈来支持过程(或函数、方法)调用。栈用来传递过程参数、存储返回信息、保存寄存器以供以后恢复之用,以及用于本地存储。为单个过程分配的那部分栈称为栈帧(stack frame)。栈帧的最顶端是以两个指针定界的,寄存器%ebp作为帧指针,而寄存器%esp作为栈指针。

Hotspot Internals in Action(七):处理器、指令与栈之2

call指令有一个目标,指明被调用过程开始的指令地址。call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是紧跟在你程序中call后面的那条指令的地址,这样当调用过程返回时,执行会继续进行。leave指令为返回准备栈。ret指令用于从过程调用中返回,从栈中弹出地址,并跳转到那个位置。如果函数要返回整数或指针的话,寄存器%eax可以用来返回值。根据惯例,寄存器%eax、%edx、%ecx被划分为调用者保存寄存器,当过程A调用B时,B可以覆盖这些寄存器,而不会破坏任何A所需要的数据。另外,寄存器%ebx、%esi、%edi被划分为被调用者保存寄存器,这就是说,B必须在覆盖它们之前,将这些寄存器的值保存到栈中。

4、ARM架构中的Java硬件加速器Jazelle

Jazelle是ARM体系结构的一种相关技术,用于在处理器指令层次对JAVA加速。   

首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母'J'标示于CPU名称中。它用来让手机制造商能够加速执行Java ME的游戏和应用程式,也因此促使了这项技术不断地发展。

ARM Jazelle技术增加了一个直接运行于处理器核心的指令集,从而提供了有效的Java字节码硬件加速。Jazelle技术通过Jazelle DBX(直接字节码执行)和Jazelle RCT(运行时编译目标)两种指令,同时为解释型和编译型Java代码提供支持。

Hotspot Internals in Action(七):处理器、指令与栈之2

如上图所示,ARM Jazelle在支持原有的ARM/Thumb两套指令集的基础上,增加了第三套Jazelle指令集(即Java 字节码)到处理器中。

Hotspot Internals in Action(七):处理器、指令与栈之2

支持Jazelle,除了需要硬件需要一颗ARM Jazelle芯片,尚需要相关的软件支持,如虚拟机,我们可以通过KVM、CVM等虚拟机得到Jazelle支持,感兴趣的同学可以自己找到相关硬件并搭建软件环境试试。

Hotspot Internals in Action(七):处理器、指令与栈之2

在ARM运行在Jazelle态时,处理器分配了一些ARM寄存器供Java 虚拟机专门使用,比如R6就用做栈指针,R0-R3做栈顶元素,R4做本地变量0。保持4个栈顶元素在ARM寄存器中对处理器执行Java字节码性能加速有显著的作用,这是因为该技术尽可能地减少了内存访问。

在Jazelle态下,ARM寄存器的用途:

R0-R3:用于缓存java栈

R4:本地变量0(this指针)

R5:软件handlers表指针

R6:栈指针

R7:Java变量指针

R8:Java常量池指针

R9-R11:JVM保留(硬件未占用)

R12,R14:Java返回地址

R13:机器栈指针

R15:Java PC


读书人网 >编程

热点推荐