论文部分内容阅读
Java语言是一种面向对象的语言,广泛应用于服务器端、客户端以及移动计算等应用领域中,Java语言一个主要的特点是自动内存管理。自动内存管理也被称为垃圾收集(garbagecollection,GC),它可以使程序员避免显示分配和回收内存引入的不必要的内存错误,从而提高软件开发效率。由于自动内存管理直接影响应用程序的性能,因此针对垃圾收集技术的相关研究也越来越多。 针对非一致性内存访问架构(non-uniform memory access architecture,NUMA)上Java应用运行过程以及GC过程存在大量的远程内存读写导致性能降低的问题,本文对新对象分配过程以及GC过程的各个阶段进行分析与研究,提出基于NUMA架构的高效GC算法,本文的主要贡献如下: 第一,基于NUMA架构,重新设计Java虚拟机中堆空间布局。通过修改新对象的分配机制以及提供内存负载均衡的方式,在保证内存利用率的情况下大量减少了后续Java应用程序运行过程中的远程访问,从而提高了NUMA架构上Java应用程序的性能。以Godson-3 NUMA架构为例,针对NUMA架构的新对象分配机制可以使SpecJVM2008应用程序的性能平均提升10%,最高达到54%。 第二,通过控制GC过程中扫描活跃对象阶段的初始根对象选取、动态负载均衡阶段截取任务队列的选取以及复制活跃对象阶段对象复制位置的选取,在NUMA架构上,GC过程中的远程访问次数大大减少。优化的GC机制对所有NUMA架构具有通用性,以Godson-3处理器的NUMA平台为例,实验结果显示,优化的GC机制极大地缩短了GC的时间,提高了应用程序的性能以及降低了应用程序性能的波动性。在SPECjvm2008测试中,GC时间平均缩短了14.6%(4.1%~41.58%),应用程序的性能平均提升了4.68%(最高提升17.8%),应用程序的性能波动性降低了76.2%;在某龙芯办公自动化系统中,本文提出的GC算法能够使某页面响应时间在不同的并发访问量时下降9.09%~29.03%。