论文部分内容阅读
Java语言采用垃圾收集器(Garbage Collector,GC)在堆上处理Java应用程序的对象分配请求并自动管理对象的回收。GC减轻了程序员管理内存的负担,但是需要耗费大量的时空开销识别堆中哪些对象是死亡的,从而成为影响Java虚拟机性能的重要因素之一。即时编译器(Just-in-time Compiler,JIT)辅助的垃圾收集技术通过由JIT分析应用程序并在其中安插显式释放对象甚至是特殊的对象分配等指令,辅助GC改进对象的回收与分配,是减轻GC自动回收负担的一种有效途径。本课题组围绕着即时编译器辅助的垃圾收集技术开展研究,前期已初步实现一个改进对象回收的原型系统,该系统只能处理单线程和规模较小的程序,并且其中的对象生命期分析算法和插桩算法的性能有待改善。本文致力于改进原有系统,重点提出一种新的对象生命期分析和插桩算法,探讨完成以下工作:1、提出一种结合活跃变量分析和指针分析的对象生命期分析算法,以获得更为精确的对象生命期信息。这种算法是过程间的、上下文敏感的,它主要分析识别应用程序中的非全局对象及其死亡位置。2、基于对象生命期分析结果,提出一种在程序中安插显式内存释放指令的插桩算法。算法基于控制流中的支配关系,通过提供不同的插桩策略来保证插桩的正确性和灵活性,能主动识别和释放已死亡的对象及其域所引用的内存空间。3、设计一种能够输出每条内存释放指令收益的日志系统。该日志系统不仅能获得垃圾收集和对象显式回收的信息,还能获得每条内存释放指令的收益信息,从而为下一步开展对象分配模式上的优化奠定了基础。4、在原有的即时编译器辅助的垃圾收集系统上实现了上述工作。其中对象生命期分析和插桩算法以一个优化遍的形式实现。改进后的系统比原有系统更高效,且能够处理多线程和规模较大程序。实验结果表明改进后的系统能够回收大量内存空间,减轻GC负担,提高内存利用率和Java应用程序的执行效率。