论文部分内容阅读
现代的编程语言(Java、C#、Ruby、JavaScript等)往往都使用自动的内存管理技术,使用垃圾收集器来负责内存空间的管理,程序员只负责分配内存,无需关注内存的回收工作,内存的回收工作交由垃圾收集器动态地完成。由于内存管理的重要性,使得垃圾收集器成为运行时系统中的一个重要组成部分,另外垃圾收集器的性能对应用程序的执行有很大的影响,故对垃圾收集器性能的研究具有重要的应用价值。
本文针对当前垃圾收集器在大对象的管理技术以及即时编译器辅助的内存管理技术中的缺陷,以Harmony(Apache组织开发的Java虚拟机实现)为平台,重点研究了垃圾收集器中大对象的管理算法和垃圾收集器对即时编译器辅助的内存管理技术的支持。在Harmony的垃圾收集器GCv5中提出了一个新的能够高效管理大对象的垃圾收集算法Packer的实现,同时给出了一个支持即时编译器辅助的并行垃圾收集算法JIT GC-MS的实现。
围绕着垃圾收集器中大对象的管理及对即时编译器辅助内存管理技术的支持,本文重点完成了以下工作:
1、深入研究了Java SE项目Apache Harmony中的垃圾收集模块GCv5,并为GCv5设计和实现了一个日志输出系统。
为了在GCv5上开展本文的工作,我们对GCv5做了深入的调研,总结了GCv5的代码组织、堆空间布局、堆空间管理、算法中的并行特性及对外的主要接口。另外,为了使得用户和开发人员了解运行应用程序时垃圾收集器内部运行的细节,我们为GCv5设计并开发了一个日志输出系统。
2、深入研究大对象的管理,在GCv5中提出并实现了一个新的高效管理大对象的并行垃圾收集算法Packer。
我们提出的Packer算法是传统大对象管理算法的超集,不需要单独的空间来管理大对象,且整个算法都是并行的。Packer能够动态地决定是否紧压大对象,从而在紧压算法和标记-清扫算法之间动态地选择最有利的策略,这样即涵盖了传统大对象管理算法的优点,同时又避免了它们的缺点。
3、基于GCv5中的GC-Ms算法,提出并实现了一个支持对象显式回收操作的并行垃圾收集器。
本文实现的垃圾收集器不仅能够支持显式的对象回收操作,且可以及时有效地重用同收的对象空间。实验结果表明,我们实现的垃圾收集器能够重用几乎所有的、显式回收的对象空间,显著地提高了Java应用程序的执行效率。
4、在即时编译器和虚拟机核心模块中添加对象显式回收操作的支持。
为了开展即时编译器辅助的垃圾收集技术,我们分别在即时编译器中的HIR、LIR、代码选择器、代码发射器中增加了对显式回收操作的支持。同时存虚拟机核心模块中添加运行时的支持将回收指令调用映射到垃圾收集器提供的对象回收接口。