从方法编译器改造的Java轨迹JIT编译器

需积分: 9 2 下载量 34 浏览量 更新于2024-09-15 收藏 349KB PDF 举报
"A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler" 本文详细介绍了从基于方法的Java即时编译器(method-JIT)改造而成的轨迹即时编译器(trace-JIT)。作者Hiroshi Inoue、Hiroshige Hayashizaki、Peng Wu和Toshio Nakatani分别来自IBM Research - Tokyo和IBM Research - T.J. Watson Research Center。他们的工作主要关注如何将现有的method-JIT转换为更高效的trace-JIT,并展示了这种转换在提升代码质量方面的潜力。 一、设计与实现 1. 转换过程:首先,他们分析了method-JIT的架构,识别出可以转化为trace-JIT的关键组件。在保留原有优化策略的基础上,他们扩展了编译范围,从单个方法的编译转变为追踪多个方法执行的连续片段(traces)。 2. 轨迹形成:通过跟踪并记录程序执行路径,trace-JIT能够捕获一段连续的指令序列,这些序列跨越了多个方法调用。这种方法比传统的method-JIT中的方法内联(method inlining)更为强大,因为它能够减少方法调用的开销,并且提供了更多的优化机会。 3. 运行时开销:然而,引入轨迹编译也会带来额外的运行时开销,包括追踪选择、编译以及维护轨迹结构等。尽管如此,由于代码质量的提高,这些开销通常可以通过性能提升来抵消。 二、性能比较 1. 代码质量提升:实验结果表明,trace-JIT在大多数情况下能生成质量更高的代码,这得益于更大的编译范围和更有效的优化。 2. 性能表现:整体上,这个trace-JIT实现了与method-JIT相当的性能,有时甚至超越了它。这表明,尽管有额外的运行时成本,但通过扩大编译视图,trace-JIT在很多场景下能够提供更好的执行效率。 三、优化策略 1. 轨迹优化:除了减少方法调用开销,trace-JIT还能够进行更复杂的循环展开、死代码消除、分支预测等优化,这些都是在更宽广的上下文中进行的。 四、未来工作 虽然取得了积极的结果,但作者也指出,进一步的工作可能包括优化轨迹选择策略,以平衡编译开销和性能收益,以及研究如何有效地处理动态语言特性的编译。 总结起来,这篇论文提供了一种将传统method-JIT转变为更高效trace-JIT的方法,强调了轨迹编译在扩展编译范围和提高代码质量方面的重要性。尽管存在一定的运行时开销,但trace-JIT的整体性能和优化潜力使其成为Java性能提升的一个有力工具。