贺蕴彬
摘 要:文章阐述了Java虚拟机的概括,分析了Java虚拟机的特点,对Java虚拟机的体系结构进行了描述。针对Java虚拟机的自适应动态优化,文章做了深入分析。最后对Java虚拟机的自适应动态优化框架以图示的方式进行了研究。
关键词:Java虚拟机;自适应;动态优化
1 Java虚拟机概述
Java虚拟机(Java virtual machine)作为一种具有抽象意义的计算机系统,可以在具体的计算机上对多种计算机功能进行仿真模拟,以此来实现特定的需求。Java Virtual Machine具有中央处理器、寄存器以及堆栈等一套完备的硬件体系,也具备成熟的指令系统。为了实现Java程序可以在多种平台上不需要修改就可以运行,可以依托Java virtual machine,通过Java程序生成相应代码来运行即可。
2 Java虚拟机的特点
通常,Java语言与其所运行的平台无关,这是Java语言的一个重要特点。其关键在于应用了ava virtual machine。使用其他高级语言编写的程序,如果需要运行在不同的平台,则要编译为多种不同的目标程序。而借助ava virtual machine,java语言不需要重新编辑即可在不同平台上运行。Java virtual machine执行目标代码时,把目标代码解读为特定平台上的机器指令来遵循。
3 Java虚拟机的体系结构
Java virtual machine可以通过不同厂商来实现,则因厂商的不同而造成Java virtual machine实现上的不同,但这不影响Java virtual machine的跨平台特性,这是因为Java virtual machine独特的体系结构。
Java virtual machine内部的抽象的体系结构由存储器、指令、数据类型和子系统组成。这些都提供了一种方式,可以对外部行为进行定义。Java virtual machine的机制有两种,类装载系统用于装载合适的类,运行引擎用来执行已经装载的类的指令。每个Java virtual machine由堆、方法区、程序计数器、Java栈以及被你的方法栈,同时,搭配了运行引擎和类装载共同构成了Java virtual machine的体系结构(如下图所示)。
4 Java虚拟机的自适应动态优化
Java virtual machine类似于抽象意义上的堆栈计算机,其作用是装载类文件,然后运行其目标代码,目标代码的操作次数都源于堆栈。现在,常见的处理器都采用寄存器结构,所以,Java virtual machine要对这些针对堆栈的命令通过即时编辑机或解释机进行解释,解读为寄存器可以执行的指令。在解释和执行的次序上是解释一次执行一次,并不包括解释后的机器指令。如果需要多次执行目标程序,就要多次解释执行。但即时编译机会把首次执行的程序翻译为本地程序,并在内存中缓存代码,后续可以再次调用而实现该方法的复用。
Java virtual machine可以动态自适应去装载,这种动态自适应装载类的模式促进了Java的灵活的网络性质。Java virtual machine既能装载本地的类程序,也可以对网络上的类进行装载。Java virtual machine为了安全地管理这些不同装载器装载的类,对其拟定了不同的名字,以此,Java virtual machine能够依照名字把代码列入不同的类型,然后对不同类型的代码执行不同的操作。
作为Java virtual machine的重要优化方法的内联,难以实现面向对象的动态编程语言。所以,基于Java的程序可以在运行的同时改变不同的调用模式,也可以动态装载不同的Java程序以应对不同的需求。
面向全局进行分析的内联,因为动态的装载而增加了复杂性。程序的全局关系被其改变,则新加载的类程序就需要被内联。因此,Java virtual machine要动态的优化之前优化过的程序,或者在执行热点代码的同时,进行这种动态优化。否则,一般的内联优化就不能系统地进行执行。
5 Java虚拟机的自适应的动态优化框架
Trace缓冲区、插桩器和动态优化策略挑选机共同构成了Java虚拟机的自适应动态优化框架。在即时编译机中,插桩器执行对访问对象的指令开展插桩,来获取Java对访问对象的相关信息。程序运行中的对象信息存放在Trace缓冲区里。动态优化策略挑选机参展缓冲区里的信息动态选择对Java程序的自适应优化策略。
上图描述了Trace缓冲区的构成。这是48KB的缓冲区,其中的每一个单元是12字节。缓冲区的写入是自上而下。缓冲区的顶部和底部分别用不同的名称代表(如图所示)。缓冲区再向下部分不可写。应用程序把数据写入缓冲区,溢出后,就产生错误代码。即时编辑机编译Java目标代码,把与平台无关的代码翻译为与平台相关的机器指令。编译器会在编译时识别该模式中的指令,并对应开始插桩,同时手机访问对象的情况。编辑后,Java程序在运行的过程中把访问对象的信息灌输到缓冲区里,写满缓冲区后,程序提醒,Java virtual machine获取提醒,然后通知动态优化策略挑选器来执行优化。优化后,Java程序返回起始点再执行。
参考文献
[1]李锡祚,霍华,胡冠.嵌入式 Java 虚拟机优化研究[J].计算机应用与软件,2009,26(7):257-259.
[2]邓洋春.Java虚拟机关键机制研究与实践[D].中南大学,2009.
[3]吴志军,何加铭,曾兴斌,等.基于嵌入式Java虚拟机的垃圾收集优化算法[J].计算机工程,2012,38(7):46-48.
[4]陈灏,陈榕.支持复合对象的Java虚拟机内存管理技术研究[J].电脑知识与技术,2011,7(22):5356-5359.
[5]赵银亮,朱常鹏,韩博,等.以虚拟机为核心实现动态行为调整的方法[J].西安交通大学学报,2013,47(6):6-11.