论文部分内容阅读
在过去的十几年中,一方面处理器多核化已经成为提高计算性能的有效手段,是目前硬件体系结构的重要发展趋势,另一方面软件设计的规模和复杂程度越来越高,从而对编程语言运行时环境的性能和可扩展性提出了更高的要求。运行时环境承担着充分挖掘硬件并行性和协调操作系统的任务,为应用程序提供高效资源管理与调度的功能,在软硬件体系结构中具有重要地位。垃圾回收器作为运行时环境中内存管理的重要部分是影响运行时环境性能的主要瓶颈,面向多核多线程环境的垃圾回收机制的设计面临诸多挑战。垃圾回收作为运行时环境中最难被并行化和并发化的部分,任何细小的改动都可能影响垃圾回收设计的正确性。本文针对多核多线程环境下垃圾回收机制的并行化及并发化设计与优化问题展开研究,从高效的并行及并发回收器设计和增强与优化垃圾回收中数据访问局部性两方面入手,在现有的垃圾回收机制基础上提出了一系列的设计与优化的方案,包括针对垃圾回收的高精度回收设计、无锁同步机制、缓存预取机制以及堆空间碎片压缩整理等。本文的主要工作和贡献包括:提出了基于追踪计数的高精度并发追踪回收机制,在已有的并发追踪回收基础上,通过在回收过程中采取追踪日志和追踪计数的方式,监视在并发追踪过程中应用线程对对象引用图的修改,根据修改的类型分别针对引用的创建和删除设计了两种拦截器保护机制,避免了在并发垃圾回收过程中活动对象的丢失。本文方案可以有效地跟踪对象的修改情况,在保证并发回收正确性前提下,减少了在重扫描过程中处理的对象数量和浮动垃圾的数量,提高了并发追踪的精度。提出了面向并发垃圾回收的无锁同步机制,为了克服传统基于锁同步方式的缺陷,提出了一种基于硬件CAS原语的无锁同步方案,该方案支持在多核系统下对任意多个内存字的无锁同步操作,有效的避免了由于锁竞争造成的程序串行化问题,提高了并发执行性能。并在此基础上提出了基于MCAS的对象扩展模型,设计了在并发垃圾回收中基于该模型的对象并发拷贝机制。实验结果表明,本文的设计在具有很好的并发访问性能和可扩展性。提出了面向并行追踪回收的缓存预取机制,分析测量了追踪垃圾回收中的主要性能瓶颈,提出了在已有软硬件平台下实现缓存预取的方案,将缓存预取加入到垃圾回收的追踪阶段,实现了对象追踪和数据加载的并行执行。通过有效的预取队列的控制,并结合并行回收器的调度机制设计了针对并行追踪的缓存预取调度机制,避免了无效预取请求,降低了缓存预取对内存带宽以及缓存污染的影响。提出了基于半空间拷贝回收的堆碎片消除机制,分析总结了在垃圾回收中堆碎片产生的原因以及对运行时环境的影响,在半空间拷贝垃圾回收基础上提出了局部堆空间碎片整理压缩的方案。该方案在局部堆压缩预留空间大小的选取方面充分考虑了压缩空间中活动对象率的情况,在此基础上,提出了在堆压缩过程中预留空间耗尽情况下的解决方案,通过两阶段压缩策略,以较小的预留空间完成堆碎片压缩整理。实验验证了本文提出的方案有效地降低了在堆压缩中预留空间大小,提高了堆空间的利用率,通过堆碎片消除机制有效地减少了垃圾回收的次数