即时编译器辅助内存管理优化-计算机应用技术专业论文.docxVIP

  • 2
  • 0
  • 约4.84万字
  • 约 54页
  • 2019-04-26 发布于上海
  • 举报

即时编译器辅助内存管理优化-计算机应用技术专业论文.docx

第 第 1 章 绪论 第 第 1 章 绪论 PAGE PAGE 1 PAGE PAGE 2 第1章 绪论 Java 虚拟机(Java Virtual Machine,JVM)采用垃圾收集策略来管理应用程序 中的对象在堆上的分配与回收工作。垃圾收集策略具有对内存管理的可靠性以及 对程序员的便利性等优点,但是它所产生的收集暂停和 CPU 损失也使其成为了 目前影响 Java 虚拟机性能的重要因素之一。 为了降低 GC 管理内存的时空开销,针对 Java 语言的内存管理优化研究成 为了近期国际上的研究热点[13-19,26,27,35]。目前的研究工作主要集中在两方面: 一 是改进 GC 本身的算法;二是编译器支持的内存管理。本课题组也展开了对 GC 内存管理优化的研究并取得了一定的成果[3-6]。课题组已经提出一种即时编译器 (Just-in-time Compiler,JIT)辅助的垃圾收集技术,通过 JIT 对应用程序展开对象 生命期分析,计算堆中对象的生命期信息并插桩回收指令以显式回收堆中已死亡 的对象,并在 Java 虚拟机中实现了这些内存管理优化。然而课题组的前期工作 对 Java 库函数的分析为保守分析,这对与库函数有关的对象的生命期分析精度 有着很大的影响,使得我们对这些对象也只能做保守处理。此外目前 Java 虚拟 机中的垃圾收集算法对堆空间的利用率还有待改善。本文针对前期工作的不足之 处,重点提出一种对针对 Java 库的精确分析方案,并改进原有平台的垃圾回收 算法,以提高编译时的对象回收收益和提高堆空间的利用率。 本章的首先介绍垃圾收集优化工作的研究背景,接着介绍当今国内外对 Java 垃圾收集优化工作的研究近况以及进一步优化所面临的挑战,最后给出本文的研 究内容以及章节组织。 1.1 问题描述 垃圾收集技术[8]是 20 世纪 60 年代开始在 Lisp 语言上使用一种内存管理技术, 由于它对程序员提供了无比的便利性使得其被提出后受到了很多编程语言的广 泛欢迎。目前垃圾收集已经成为了 Java、Lisp、Smalltalk、ML 等多种编程语言 的一个重要集成部分。随着垃圾收集的广泛运用,它的性能特征也越来越受到程 序员的关注。目前 JVM 中的垃圾收集器性能较之以前已经有了很大改进,对多 数垃圾收集算法而言程序运行时用于垃圾收集的停顿时间已经缩小到总运行时 间的 10%左右,但是它还是有很大的优化空间,尤其对内存受限体统而言垃圾收 集所产生的开销严重影响到了应用程序的执行性能。 当前针对垃圾收集的存储管理优化主要分为在编译阶段做程序分析以辅助 内存管理和改进 GC 自身算法这两个方面,并且都出现了一些比较成熟的技术。 近期提出的基于对象的唯一性引用[26,27]信息来做独立对象的显式回收工作,和并 发式垃圾收集器[13,15-17]就是这两个方面研究的热点成果。本课题组重点研究 JIT 辅助的对象显式回收优化,其处理框架如图 1.1 所示。课题组由 JIT 分析 Java 应 用程序的对象生命期特征,确定堆中对象的死亡点所处的程序位置,并安插合适 而及时的显式回收指令以通知 GC 负责回收该对象空间。而 GC 接到显式回收请 求之后,可以立即回收该对象的空间并对该空闲空间展开复用工作,这有效的减 轻了 GC 自动回收内存的负担。 对象生命期 分析 J I T 插桩变换 V GC M 分 C配 堆 C 空 O 间 R 回 管 E 收 理 即时编译器 虚拟机内核 垃圾收集器 图 1.1 JIT 辅助的 GC 优化工作框架 在对 Java 应用程序展开对象生命期分析时,对方法内函数调用点的过程间 处理情况对该分析精度有着较大的影响。课题组在 JIT 上的分析工作对用户定义 的函数进行了精确的过程间分析,而对 Java 库中的函数则采取了保守分析。这 是因为 Java 库中的函数较多的涉及到 Java 语言的动态绑定、本地调用等动态特 性,使得我们在编译阶段无法确定或获取到被调用 Java 库函数的源代码,从而 无法展开对其的过程间分析。对 Java 库函数实施保守分析会影响到对象生命期 分析的精度,首先我们因此而无法识别和回收在 Java 库函数内部分配对象,然 后由于库函数的保守处理使得我们只能对库函数调用点涉及到的对象做保守处 理,这会损失很多的回收潜力。另外目前课题组工作平台中的基于标记-清扫[18] 策略的并发垃圾收集器也存在着进一步的优化潜力,它管理的堆空间会随着垃圾 收集的执行而在堆中出现越来越多的碎片空间,这对堆空间的利用率和堆中数据 局部性都有着不利影响。 本文研究的首要问题在于提出一种精确分析 Java 库函数的研究方案,使得 我们不仅可以在库函数调用点做过程间分析,精确分析

文档评论(0)

1亿VIP精品文档

相关文档