论文部分内容阅读
云计算和大数据的迅猛发展使得Java的应用更为广泛,同时也对Java的性能提出了更高的要求。传统Java虚拟机的设计已不能满足实际系统的需求。如何提高Java虚拟机的性能已成为现代信息产业亟需解决的关键问题。因此,研究Java虚拟机性能的优化技术具有十分重要的现实意义,已成为现代计算机系统领域研究的热点。 动态编译和解释执行是Java虚拟机执行应用程序的两种方式,直接决定了Java虚拟机的性能。本文分别从动态编译和解释执行两方面对Java虚拟机性能优化技术进行了研究,针对动态编译的程序热点识别、动态编译调度和解释器指令分派提出了一系列性能优化技术,并在龙芯平台上进行了验证。本文的主要贡献和创新点如下: 1.提出了基于贝叶斯估计的程序热点识别算法。为了提高热点识别的灵活性以及对程序行为的自适应能力,本文设计了以智能阈值为核心的热点识别模型。在此基础上,提出了一种基于贝叶斯估计的程序热点识别算法。其核心思想是:利用方法当前执行次数以及在未来短时间内可以预期的前瞻性执行次数为观测数据,通过贝叶斯估计实现对程序热点的前瞻性识别。该算法可以显著降低热点识别的延迟,从而大幅降低热点方法的编译延迟,有效提升虚拟机的性能。实验表明,该算法使得系统的启动性能平均提升14.6%,最高提升幅度高达61.3%;峰值性能平均提升4.2%,最高提升幅度高达24.0%。 2.提出了编译队列监视下的高性能动态编译调度算法。本文深入分析了动态编译行为的主要特征,揭示了动态编译调度的优化目标。在此基础上,提出了编译队列监视下的高性能动态编译调度算法。其核心思想是:通过降低热点方法的排队延迟和运行时开销来提升系统的性能。调度时以程序中方法的重要程度和编译代价为参数计算调度的优先级,既能增强系统的响应能力,又能降低编译队列的平均排队延迟。此外,在调度的同时进行编译队列监视,通过跟踪编译队列中方法的活跃性,以延迟非活跃方法的编译,并且选择性地将部分非活跃方法从编译队列中删除,进一步降低了系统的运行时开销。实验表明,该算法使得系统的启动性能平均提升8.9%,最高提升幅度高达41.8%。 3.提出了一种软硬件协同设计的解释器指令分派优化技术。本文对解释器指令分派的开销进行了量化分析,指出对字节码本地指令序列入口地址的获取构成了指令分派的瓶颈。在此基础上,提出了一种软硬件协同设计的指令分派优化技术。其核心思想是:在软件层面,通过对指令分派表进行优化,消除了代价较高的入口地址加载操作;在硬件层面,通过扩展处理器的访存指令,进一步实现了基于硬件支持的访存加速。软硬件协同设计可以最大限度地降低由指令分派引入的运行时开销,从而提升解释执行的效率。实验表明,优化后解释器的平均性能提升11.5%,最高提升幅度为15.4%。 上述部分工作已在龙芯平台的Java虚拟机中得到了实际应用。本文提出的一些优化思想和方法对其它虚拟机和应用程序的设计与优化也具有重要的参考意义。