一句话:提出 CoSSJIT,将静态分析与 JIT 运行时推测结合,用于生产 JVM 上的激进栈分配,栈分配提升 5.7 倍。
JIT 编译器常为效率牺牲分析精度,而提前编译器虽能做精确的流敏感过程间分析,却在运行时可特化场景下过于保守。本文提出 CoSSJIT,首次在 JIT 编译中结合静态分析与推测优化,并在生产 JVM 上实现激进栈分配。方法上,识别静态分析保守但 JIT 推测可获精度的场景,提出“推测条件”并插入静态过程间数据流分析器,使其生成可在运行时特化的部分结果;再扩展生产 JIT 编译器,用推测条件的解析值增强静态分析结果。评估显示,栈分配提升 5.7 倍并转化为性能收益,同时保证 JIT 编译期间的功能正确性。
Just-in-time (JIT) compilers typically sacrifice the precision of program analysis for efficiency, but are capable of performing sophisticated speculative optimizations based on run-time profiles to generate code that is specialized to a given execution. On the contrary, ahead-of-time static compilers can often afford precise flow-sensitive interprocedural analysis, but produce conservative results in scenarios where higher precision could be derived from run-time specialization. In this paper, we propose the first-of-its-kind approach to enrich static analysis with the possibility of speculative optimization during JIT compilation, as well as its usage to perform aggressive stack allocation on a production Java Virtual Machine (JVM). Our approach of combining static analysis with JIT speculation – named CoSSJIT – involves three key contributions. First, we identify the scenarios where a static analysis would make conservative assumptions but a JIT could deliver precision based on run-time speculation. Second, we present the notion of ‘‘speculative conditions’’ and plug them into a static interprocedural dataflow analyzer (whose aim is to identify heap objects that can be allocated on stack), to generate partial results that can be specialized at run-time. Finally, we extend a production JIT compiler to read and enrich static-analysis results with the resolved values of speculative conditions, leading to a practical approach that efficiently combines the best of both worlds. Cherries on the cake: Using CoSSJIT , we obtain 5.7× improvement in stack allocation (translating to performance), while building on a system that ensures functional correctness during JIT compilation.
@article{paperbot2885,
title = {CoSSJIT: Combining Static Analysis and Speculation in JIT Compilers},
author = {Aditya Anand and Vijay Sundaresan and Daryl Maier and Manas Thakur},
journal = {Proceedings of the ACM on Programming Languages},
volume = {9},
number = {OOPSLA2},
year = {2025},
doi = {10.1145/3763149}
}