快速业务通道

Java虚拟机的研究与实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
还不清楚是否需要执行该方法。编译一个不需要执行的方法,将带来不必要的空间和时间上的损失。 因此虚拟机设计者需要采用一种优化方案,即只有需要被执行的方法才能被JIT编译,这个问题可以参照kaffe虚拟机中的trampoline来解决。

JIT实现步骤:(1)对字节码进行验证并且划分基本块;(2)产生四元式;(3)根据四元式生成本地机器码;(4)操作数地址回填。

Java虚拟机的研究与实现 - 编程入门网

图3及时编译器的流程图

在字节码指令模拟操作的时候,按其语义动作生成指令属性四元式序列,指令属性四元式的结构为: (目的操作数, 源操作数1,源操作数2,语义动作),四元式数据结构如下:

typedef struct Sequence{   void (*func)(struct Sequence*); //语义动作   union{   jvalue value;   struct _label_ *labconst; //标号类型操作数   Method *methconst; //方法地址操作数   struct slotData **smask;   struct slotData *slot; //槽操作数   }u[3];   uint8 type; //Sequence类型   uint8 refered; //该四元式的引用   struct Sequence *next; //下一个四元式 }Sequence;

Java虚拟机的研究与实现(3)

时间:2011-01-06 计算机与信息技术 夏兵 俞建军

其中目的操作数为Sequence.u[0],源操作数1为Sequence.u[1],源操作数2为Sequence.u[2]。 Sequence.func则代表语义动作,它主要用于生成该Sequence语义的本地机器码。

指令属性四元组建立后就进入代码生成阶段,属性四元组在形式上已经非常接近本地机器指令,只需要遍历该属性序列,执行相应的语义动作函数,即可生成机器指令。语义动作函数的功能包括操作数寻址、寄存器分配、建立指令连接以及本地机器码生成等。

在及时编译过程中要经常使用到操作数栈,虚拟机把操作数栈作为它的工作区。大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。而操作数栈区,局部变量区和帧数据区被包含在方法帧中。方法帧的数据结构如下:

typedef struct Frame{   struct Frame *prev; // 上一帧   struct Frame *next; // 下一帧   value_t *sp; // 栈槽指针   uint8 *pc; // 程序计数器   method_t *method; //指向正在被执行的方法   class_t *class_ptr; // 指向包含该方法的类   value_t locals[1]; //方法的局部变量的起始 }Frame;

本实现中的及时编译器的优点表现在:(1)大大提高了Java应用程序运行的速度;(2)编译过程只在运行时进行,不会改动Java字节码,不会影响Java程序的可移植性;(3)对字节码的编译,使得许多优化手段的采用成为可能。缺点表现在:(1)如果对所有方法进行编译,则会占用大量的内存空间;(2)及时编译的结果在虚拟机终止运行时不被保存,这意味着下一次运行同样的程序仍需要重复编译。

3、垃圾收集

垃圾收集器主要的任务是检测出垃圾对象,然后回收垃圾对象使用的堆空间并还给程序。kaffe采用了增量垃圾收集的算法,而本实现中采用了三色标记并清除算法。

在标记之前先将堆中所有的分配单元置成白色,然后按深度优先算法遍历每一个单元。当垃圾收集器遍历一个分支的时候,如果一个分配单元及与之相关联的单元都被遍历到,则将其标记成黑色。 如果一个单元被遍历到,但是与之相关联的单元尚未被遍历,则将该单元标记成灰色。这时,垃圾收集器将继续遍历与该灰色单元相关联的单元,直到这些相关联的单元全部被遍历到,才能将这个灰色单元标记成黑色。最后当所有被遍历到的单元都被标记成黑色的时候, 将堆中被标记成白色的分配单元回收。

Java虚拟机的研究与实现 - 编程入门网

图4三色标记并清除算法的中间过程图

最后是对堆碎块进行压缩处理。是通过快速地移动对象来减少堆碎块。即把当前活动的对象移动到堆的一端,在此过程中,堆的另外一端出现一块大的连续的内存单元。所有被移动的对象的引用也被更新

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号