Reblogging from ZeroTurnaround’s Rebellab blog site
One of the most fascinating additions to Java 9 is the JVMCI: Java-Level JVM Compiler Interface, a Java based compiler interface which allows us to plug in a dynamic compiler into the JVM. One of the main inspirations for including it into Java 9 was due to project Graal — a dynamic state-of-the-art compiler written in Java.
In this post we look at the reasons Graal is such a fascinating project, its advantages, what are the general code optimization ideas, some performance comparisons, and why would you even bother with tinkering with a new compiler.
Like everyone else we were inspired by the vJUG session by Chris Seaton on Graal – it looks like a great tool and technology and so we decided to play with the technology and share it with the community.
…you can read the rest at ZeroTurnaround’s Rebellab blogs
In case, you are wondering what some of the ASCII-art images in one of the paragraphs is about, here’s a bit of explanation, hopefully it will clear up any doubts.
How does it actually work?
A typical flow would look like this:
AST → Abstract Syntax Tree (explicit data structures in memory)
We all know that a JIT is embedded inside HotSpot or the JVM. It’s old, complicated, written in C++ and assembly and is fairly hard to understand. It is a black box and there is no way to hook or link into the JIT. All the JVM languages have to go through the same route:
(ASM = assembly)
The flow or route when dealing with traditional compilers and VM would be:
But with Graal, we get the below route or flow:
(notice Graal skips the steps that create byte-code by directly generating platform specific machine code)
Graal basically helps moving the control-flow from Code to the JIT bypassing the JVM (HotSpot, in our case).
I hope you enjoyed the read, please feel free to share any constructive feedback, so we can improve the material for the community as a whole. We learnt a lot while drafting this post and hope the same for you.