论文部分内容阅读
新兴的非易失性存储器(NVM)技术拥有低访问延迟、非易失性和字节寻址的特性。这些特性使得它在不久的将来有可能替代动态随机存储器(DRAM)或者和DRAM混合使用。随着云计算和并行计算的出现,许多企业都开始使用大数据处理系统,例如Spark,Hadoop和Flink。这些系统通常运行在Java虚拟机之上,且对数据存储的速度有较高的要求,于是出现了使用NVM给Java虚拟机增加持久化支持的工作。这些工作的总体思想是在NVM上建立一个具有持久化特性的Java堆,从而使得Java的对象数据具有非易失性。Java虚拟机中很重要的一部分就是垃圾回收器。Java、C#、Javascript等高级语言都使用垃圾回收器来帮助用户自动回收失效的对象并保证内存的安全。由于NVM的非易失性等特征也使得原本的垃圾回收不能直接在NVM上使用,需要进行修改。目前所出现的基于NVM的垃圾回收器多数都是单一代的,即将可持久化的对象用统一的回收器进行垃圾回收。这种设计虽然能够简化垃圾回收器的实现,却忽略了 Java中大部分对象的存活时间都很短,只有很少一部分对象能够长时间留存在堆上的特点。本论文提出一个支持崩溃恢复的基于NVM的分代式Java垃圾回收器,它将持久化堆划分成年轻代和老年代两部分。该垃圾回收器包含了两种垃圾回收策略:年轻代的垃圾回收可以清除年轻代中失效的对象,而老年代的垃圾回收可以清除持久化堆上所有失效的对象。它还充分利用了NVM非易失性的特点,确保在垃圾回收过程中即使发生了崩溃也不会出现数据丢失或者不一致的状况。本文主要贡献分为以下三个部分:1.针对年轻代的垃圾回收,本文讨论了可能出现的不一致性的场景,提出了多种解决方案,使Java虚拟机即使在垃圾回收过程中意外崩溃也可以正常恢复并将回收继续进行下去。2.针对老年代的垃圾回收,本文主要基于已有的单代式持久化Java堆的垃圾回收机制并对其进行优化,通过分析其元数据的特点和内存分布情况将数据进行不同方式的压缩,使其内存开销大量减少。3.对分代式垃圾回收的性能做了相应的测试。测试表明,本文提出的分代式垃圾回收器在对象创建删除较多的场景下比前人工作中的单一代回收器有明显性能提升。提出的对元数据的压缩在存储时间、空间及恢复上的消耗都有较大程度的降低。