Trace-Based Compilation in Execution Environments without Interpreters
Michael Bebenita, Mason Chang, Gregor Wagner, Andreas Gal, Christian Wimmer, Michael Franz: Trace-Based Compilation in Execution Environments without Interpreters. In Proceedings of the International Conference on Principles and Practice of Programming in Java, pages 59–68. ACM Press, 2010. doi:10.1145/1852761.1852771Download as PDF
© ACM, 2010.
Abstract
Trace-based compilation is a technique used in managed language runtimes to detect and compile frequently executed program paths. The goal is to reduce compilation time and improve code quality by only considering hot parts of methods for compilation. Trace compilation is well suited for interpreter-based execution environments because the control flow of an application program is highly visible and recordable. In this paper, we show that trace compilation is also feasible and beneficial in runtime environments without interpreters where it is more difficult to monitor the control flow of an application.
We present the implementation of Maxpath, a trace-based Java just-in-time compiler for the meta-circular Maxine virtual machine. Maxine uses a tiered compilation strategy where methods are first compiled with a non-optimizing just-in-time compiler in order to collect profiling information, and then recompiled with an optimizing compiler for long-term efficient execution. We record traces by dynamically inserting instrumentation code in non-optimized methods. Execution traces are first collected into trace regions, after which they are compiled, optimized and linked to non-optimized methods for efficient execution. We show that trace-based compilation is an effective way to focus scarce compilation resources on performance critical application regions.