论文部分内容阅读
运行时系统是执行计算机程序的基本环境,如何提升其执行效率是计算机学科的研究热点与难点之一。Java虚拟机作为一种重要的运行时系统,因易于扩展、便于跟踪程序执行和程序移植等优点而被广泛研究。近年来,借助即时编译、并行执行等方法,桌面平台与服务器平台的虚拟机执行效率获得了很大提升。然而,对嵌入式平台虚拟机而言,受硬件资源限制,传统性能优化方法面临诸多挑战,如何提升其执行效率有待进一步研究。尤其是随着Android系统的流行,嵌入式Java虚拟机的性能问题得到日益关注,开展针对嵌入式平台虚拟机性能优化的研究变得更加迫切。通过对代码进行动态编译,即时编译技术被广泛应用于运行时系统进行性能优化。然而此类编译技术需要比较大的运行时开销,并不能直接用于嵌入式平台虚拟机。即时编译系统的运行时开销来自两个方面:检测延时和编译延时。目前,降低Java虚拟机即时编译系统开销的方法大多面向桌面和服务器平台,针对嵌入式Java虚拟机的方案仍是空白。本文针对这一技术空白,提出用轻量级的代码缓存复用技术来消除检测延时、降低编译延时从而降低嵌入式Java即时编译系统的运行时开销。本文在Android的运行时环境Dalvik基础上,设计实现了代码缓存复用框架CCARF(Code Caching And Reusing Framework)。通过在运行时复用先前缓存的可执行代码,CCARF有效地降低了编译延时,省去了对方法的热度检测过程,消除了检测延时。CCARF的核心是针对Android的位置无关代码的设计和缓存代码的管理与复用。它致力于提供一个实际、有效、轻量级的代码缓存与复用解决方案。CCARF的主要工作和贡献如下:1.探索了Java虚拟机生成的可执行代码中的位置相关性,并以Dalvik为例,分析总结了这些相关性对位置无关代码和缓存复用技术的影响。2.针对可执行代码中不同种类的位置依赖,分别提出了消除依赖的算法,并实现了相应的代码生成器。其中的引用按需解析和即时解析技术,取代了传统的基于符号表和链接器的解析技术,尤其适合嵌入式平台。3.探讨了不同的代码复用策略对降低嵌入式Java虚拟机编译器延时的影响,并设计实现了高效的位置无关代码管理器,包括设计可执行代码的存储格式,缓存文件加载策略以及已缓存文件检测算法等。4.以SPECjvm98测试套件为基础设计了较完整的实验,并从性能提升、代码膨胀和缓存空间大小三方面对CCARF做出了评测。结果表明,CCARF在可执行代码平均膨胀率6%的情况下,能提升SPECjvm98测试程序平均性能约11.7%。