● 摘要
通用Java系统,例如J2SE或者J2ME系统,在实时性上普遍存在着较大的缺陷。为了解决这一问题,Sun公司和Java Community Process (JCP)发布了Real-Time Specification for Java (RTSJ,Java实时规范)。Java实时规范在内存管理方面提出了一种新的基于区域的内存管理模型,在原有Java堆内存的基础上引入了非堆内存抽象(non-heap memory)。区域内存管理模型允许程序员将实时任务安排在非堆内存中进行,以避免Java堆内存中发生垃圾回收所带来的不确定性时间开销。然而,Java实时规范引入的非堆内存抽象也存在着一定的问题,例如,为了防止悬空引用现象的发生,RTSJ对存在于实时Java系统中不同内存区域的对象之间的引用关系有着严格的约束,实时Java虚拟机需要实施一系列的运行时对象引用检查来保证对象引用符合RTSJ提出的规范。这些频繁进行的运行时对象引用检查增加了额外的时间开销且运行时间不可预测,这对系统的实时性具有非常大的影响。
本文旨在研究如何优化实时Java虚拟机中对象间引用检查方法以降低其时间开销,研究内容主要是从静态分析的角度在编译期间消除部分运行时对象引用检查代码,从而降低运行时检查频度。本文首先分析了国内外关于实时Java中对象引用检查优化的研究现状。之后介绍了实时Java规范的相关内容,主要是内存管理子系统方面的扩展,以及当前学术界与工业界中的一些实时Java平台的实现,并且介绍了指针分析与逃逸分析的基本方法与优化中的应用场景。在此基础上,本文提出了一种基于等价类合并的上下文敏感、流不敏感的逃逸分析算法,并详细阐述了该算法的设计与实现方式。通过逃逸分析算法计算出对象生命周期内可能驻留的内存区域,并以此为依据来消除运行时非必须进行的对象引用检查。该优化方法已在开源的实时Java虚拟机jRate中实现,经过实际测试,可以有效地消除本文选取的基准测试程序中60%~85%的运行时对象引用检查次数,并提高4.2%~6.8%的程序运行速度。
相关内容
相关标签