并行处理研究所(PPI)的一篇通过利用学习规则提升Java 虚拟机运行时编译性能的论文被OOPSLA 2025接收。OOPSLA(ACM international conference on Object oriented programming systems, languages, and applications)是面向对象技术领域的顶级会议,CCF A类。OOPSLA 2025将于2025年10月12日到10月18日在新加坡召开。
论文信息如下:
Hanzhang Wang,Wei Peng,Wenwen Wang,Yunping Lu,Pen-Chung Yew,Weihua Zhang
JavART: a Lightweight Rule-Based JIT Compiler Using Translation Rules Extracted from a Learning Approach.
To Appear in ACM international conference on Object oriented programming systems languages and applications(OOPSLA 2025)
传统的JVM(Java Virtual Machine)中主要有两种执行模式,解释执行和JIT编译执行。在解释执行模式下,每条字节码直接由解释器将其解释成机器码,这种模式下可以将字节码快速翻译成机器二进制指令,但生成的代码质量比较低。另一种是JIT编译执行,它针对热点函数进行运行时优化并生成代码。由于需要应用了一系列编译优化,JIT编译生成的代码质量较高,但编译的速度非常慢。由于这些限制,在实际场景中,很多代码只能执行在解释器生成的低效代码模式下,从而影响了整个应用的执行性能。如何平衡代码质量和编译速度是JVM运行时编译要考虑的一个关键问题。
在JIT编译器优化字节码生成本地代码的过程中,字节码和本地代码存在一定的对应关系,并且包含了JIT编译器的优化信息。如果我们能够学习提取这种对应关系,并应用到字节码的动态翻译的过程中,既可以有效提升翻译速度,也可以获得更高效的代码。
基于这个发现,我们提出了一种基于学习规则的JIT编译器。该编译器分成离线规则学习和在线规则应用两个部分。离线规则学习通过提取JIT编译器生成的二进制代码与字节码的对应关系,获得初步翻译规则。通过符号执行保证规则的正确性,并通过规则参数化降低学习训练的开销。在线规则应用部分,当有字节码需要被翻译执行时,通过应用学习获得的规则对字节码进行翻译替换原有解释器的功能。当代码编程热点代码后,再将热点代码交给JIT编译器进行优化。
目前,相关设计已实现在OpenJDK11和Android 14中。实验结果显示,对比于OpenJDK11的默认配置(Interpreter+C1+C2),该设计可在dacapo基准测试集上达到平均20%的性能提升。对比于Android 14的默认配置(Interpreter+JIT baseline+JIT optimized),可在Facebook,tiktok等真实应用测试中达到平均23%的性能提升。