hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧

hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧

ID:30779240

大小:254.98 KB

页数:12页

时间:2019-01-03

hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧_第1页
hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧_第2页
hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧_第3页
hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧_第4页
hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧_第5页
资源描述:

《hotspot模板解释器目标代码生成过程源码分析-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、HotSpot模板解释器H标代码生成过程源码分析・编程开发技术HotSpot模板解释器目标代码生成过程源码分析原文岀处:iceAeterna虽然说解释执行模式是逐字逐句翻译给目标平台运行的,但这样的过程未免太过缓慢,如果能把字节码说的话做成纸条,运行时只要把对应的纸条交给目标平台就可以了,这样,执行速度就会明显提升。JVM的Hotspot虚拟机的模板解释器就是用这种方法來解释执行的。在开始分析之前,先了解一下JVM的执行方式。(1)•边解释边运行,即每次解释一条字节码并运行其解释的本地代码,这种执行引擎速度相对很慢(2).JTT(即时编译)具有更快的运行速度但是需要

2、更多的内存,方法被第一次调用时,字节码编译生成的本地代码将会被缓存,这样在该方法下次被调用的时候,将取出缓冲的本地代码直接运行(3).自适应优化,对于经常被调用的方法,则会缓存其编译产生成的本地代码,对于其他较少被调用的代码,仍对其采用解释执行的方法。(4).片上虚拟机,即虚拟机的执行引擎直接嵌入在片上HotSpot虚拟机口J以配置为以下运行模式:-Xint:解释模式-Xcomp:编译模式-Xmixed:混合模式(通过java-version就可以查看虚拟机的运行模式)HotSpot在启动时,会为所有字节码创建在目标平台上运行的解释运行的机器码,并存放在CodcCa

3、chc中,在解释执行字节码的过程中,就会从CodcCachc屮取岀这些本地机器码并执行。Hotspot虚拟机的细节技术实现值得借鉴,如果你觉得源码甚至汇编代码比较枯燥的话,也可以大致了解相关模块的组件、工作流程,对相关实现有一定的认识。下面就从模板解释器的初始化开始,分析HotSpot的解释代码的生成。在创建虚拟机时,在初始化全局模块过程中,会调用intcrprctcr_init()初始化模板解释器,模板解释器的初始化包括抽彖解释器AbstractInterpreter的初始化、模板表TemplateTable的初始化、CodeCache的Stub队列StubQue

4、ue的初始化、解释器生成器InterpreterGenerator的初始化。voidTempiateInterpreter::initialize(){if(code!=NULL)return;//assertions//...Abstractinterpreter::initialize();TemplateTable::initialize();//generateinterpreter{ResourceMarkrm;TraccTimctimer(,zIntcrprctcrgencreition",TraccStartupTimc);intcode_size=I

5、nterpreterCodeSize;NOTPRODUCT(code_size*=4;)//debugusesextrainterpretercodespace_code=newStubQueue(newTnterpreterCodeletTnterface,code_size,NULL,"Intcrpretcrz,);InterpreterGeneratorg(_code);if(PrintInterpreter)print();}//initializcdispatchtableactivetable=normaltable;1.AbstractInterpre

6、ter是基于汇编模型的解释器的共同基类,定义了解释器和解释器生成器的抽彖接口。2.模板表TemplateTable保存了各个字节码的模板(目标代码生成函数和参数)。TemplateTable的初始化调用def()将所有字节码的目标代码生成函数和参数保存在_template_table或_template_table_wide(wide指令)模板数组中//interpr.templates//Javaspecbytecodesubepdispelvmiswdinoutgeneratorargumentdef(Bytecodes::_nop,,vtos,vtos,nop

7、,_);def(Bytecodes::_aconst_null,,vtos,atos,aconst_null,_);def(Bytecodes::_iconst_ml,、vtos,itos,iconst,-1);def(Bytecodes::_iconst_0,,vtos,itos,iconst,0);def(Bytecodes::_iconst_l,,vtos,itos,iconst,1);def(Bytecodes::_iconst_2iconst,2);//...其他字节码的模板定义,vtos,itos,其中,def()是查看数组对应项是否为空,若为空则初

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。