• When should a compiler expand garbage collection barriers?

    Most compiler engineers I know (including myself) believe it is a good thing to expose as much information about the program under compilation as possible to the compiler. The hope is that, in return, the compiler will perform more precise analysis and more powerful optimizations. Great deal, isn’t it? Well, as in any sufficiently complex software product, there are trade-offs to consider. For example, additional program information might increase compilation times or make the compiler less maintainable. This post describes a case in a production compiler (C2, the JDK’s optimizing JIT compiler) where we have figured out that the right trade-off is to actually reduce the amount of program information fed to the compiler.

  • A friendlier visualization of Java's JIT compiler based on control flow

    The previous post introduced the Ideal Graph Visualizer (IGV), a tool to visualize the inner workings of OpenJDK’s main just-in-time compiler. This post focuses on a new IGV feature, to be released in OpenJDK 19, to make it easier for compiler experts to maintain and extend the compiler and for advanced Java users to get a grasp of it.

  • Improving the Ideal Graph Visualizer for better comprehension of Java's main JIT compiler

    Hello, world! This first post describes a tool to visualize the inner workings of Java’s main JIT compiler, and our work to make this tool more useful for current and potential users.