- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析dalvik虚拟机JIT技术的实现
第 PAGE \* Arabic \* MERGEFORMAT 3 页
浅析dalvik虚拟机JIT技术的实现
一、HYPERLINK /tag-@Y4R+j.html虚拟机, HYPERLINK /tag-jit.htmljit7说明据说Android 2.2的虚拟机dalvik使用了JIT技术,使其运行速度快了5倍。dalvik解释并执行程序,JIT技术主要是对多次运行的代码进行编译,当再次调用时使用编译之后的机器码,而不是每次都解释,以节约时间。5倍是测试程序测出的值,并不是说程序运行速度也能达到5倍,这是因为测试程序有很多的重复调用和循环,而一般程序主要是顺序执行的,而且它是一边运行,一边编译,一开始的时候提速不多,所以真正运行程序速度提高不是特别明显。
二、JAVA虚拟机主要的优化技术
1.JIT(Just In Time)最开始指在执行前编译,但是到现在已经发展成为,一开始解释执行,只有被多次调用的程序段才被编译,编译后存放在内存中,下次直接执行编译后的机器码
1)method方式:以函数或方法为单位进行编译
2)trace方式:以trace为单位进行编译(可以把循环中的内容作为单位编译),此方法也包含method
2.AOT(Ahead Of Time)在程序下载到本地时就编译成机器码,并存储在本地存在硬盘上,以加快运行程度,用此种方式,可执行的程序会变大四五倍
三、dalvik中JIT的实现每启动一个应用程序,都会相应地启动一个dalvik虚拟机,启动时会建立JIT线程,一直在后台运行。当某段代码被调用时,虚拟机会判断它是否需要编译成机器码,如果需要,就做一个标记,JIT线程不断判断此标记,如果发现被设定就把它编译成机器码,并将其机器码地址及相关信息放入entry table中,下次执行到此就跳到机器码段执行,而不再解释执行,从而提高速度。
四、dalvik JIT部分代码分析android 2.2代码还未发布,而2.1代码中已经加入JIT部分,只是默认未打开,以2.1代码为例对其原理进行分析,源码位置:$ANDROID_SRC/dalvik/vm/
1.核心文件
1)vm/interp/Jit.c
供外界调用的入口
2)vm/compiler/compiler.c 核心函数的实现 3)vm/compiler/Frontend.c 编译method和trace的实现 2.全局变量
1)gDvmJit 所有与JIT相关的数据及结构都存储于此,各个程序通过它访问JIT资源
3.开关
1)dvmCompilerStartup() (vm/compiler/Compiler.c) 在虚拟机启动时调用
2)dvmCompilerShutdown()(vm/compiler/Compiler.c) 在虚拟机关闭时调用
4.线程
1)compilerThreadStart()(vm/compiler/Compiler.c) 被dvmCompilerStartup()调用,在虚拟机运行过程中一直生存的线程,while循环判断是否有代码需要编译,如果有,则调用dvmCompilerDoWork()对其进行编译
5.编译成字节码 doCompilerdoWork()又分method和trace两种情况进行编译
1)dvmCompilerMethod()(vm/compiler/Frongend.c)
2)dvmCompilerTrace()(vm/compiler/Frongend.c)其中的:dvmCompilerMIR2LIR(),dvmCompilerAssembleLIR()(MIR和LIR都是解释层的中间表示)逐层翻译成机器码
6.编译后字节码的存储
1)dvmcompilerSetupCodeCache() (vm/compiler/Compiler.c)gDvmJit.codeCache:使用mmap分配(1024x1024),用于存在编译后的代码gDvmJit.codeCacheByteUsed:codeCache的使用情况gDvmJit.codeCacheFull:codeCache是否已写满gDvmJit.pJitEntryTable:entry表,每个trace对应一个entry
7.其它线程对JIT资源的访问以下是一个示例,说明从主函数到JIT的调用关系如下:AndroidRuntime::Start()-startVm()-_JNIEnv::CallStaticVoidMethod()-Check_CallStaticVoidMethodV()-CallStaticVoidMethodV()-dvmCallMe
您可能关注的文档
- 坡地城市综合体规划设计浅析.doc
- 七宝皮影实施方案.doc
- 汽车维修技能竞赛实施方案(电控悬架).doc
- 汽车压铸模具常见问题浅析.doc
- 浅谈当前时期如何提高卫生执法监督水平.doc
- 浅析:新站前期优化需要做的准备工作和注意要点.doc
- 浅析:智能传感器行业整体现状.doc
- 浅析7-Eleven便利店的营销模式.doc
- 浅析BIM在施工单位的研究及应用.doc
- 浅析C#插件式程序开发经验.doc
- 急性肾功能衰竭综合征的肾血管介入性诊治4例报告并文献复习.docx
- 基于血流动力学、镇痛效果分析右美托咪定用于老年患者髋部骨折术的效果.docx
- 价格打骨折 小心统筹车险.docx
- 交通伤导致骨盆骨折合并多发损伤患者一体化救治体系的效果研究.docx
- 多层螺旋CT与DR片诊断肋骨骨折的临床分析.docx
- 儿童肱骨髁上骨折后尺神经损伤恢复的预测因素分析.docx
- 康复联合舒适护理在手骨折患者中的应用及对其依从性的影响.docx
- 机器人辅助老年股骨粗隆间骨折内固定术后康复.docx
- 超声辅助定位在老年髋部骨折患者椎管内麻醉中的应用:前瞻性随机对照研究.docx
- 两岸《经济日报》全面合作拉开帷幕.docx
最近下载
- 2025-2026学年青岛版(五四学制)(2024)小学数学二年级上册(全册)教学设计(附目录).pdf VIP
- QC_T 750-2006 清洗车通用技术条件.docx VIP
- 中医学基础试题及答案.docx VIP
- 企业安全讲话稿.docx VIP
- 扭矩转角传感器失效状态下的方向盘转向助力方法及系统.pdf VIP
- 中国餐饮连锁企业薪酬管理现状及对策研究--以星巴克为例.docx VIP
- DBJT15-234-2021 广东省绿色建筑检测标准 (2).pdf VIP
- 外贸单证年终总结.pptx
- 国家开放大学《机电接口技术课程设计》任务书参考答案.doc VIP
- 车辆伤害专项应急救援预案.docx VIP
原创力文档


文档评论(0)