2019 is coming to an end. It was an extremely exciting, eventful, and productive year for the GraalVM project and community. Read some of the highlights below!
First Production Release
This year in May our team reached a major milestone: we released the first production-ready version of GraalVM, GraalVM.19.0. Originating in Oracle Labs, an Oracle R&D organization, GraalVM was heavily researched for almost 8 years, and our team is very proud of reaching the production-ready status.
Community and Ecosystem
We are happy to see an active and vibrant community around GraalVM contributing to the project, building new things on top of GraalVM, and extending the ecosystem to help others benefit from what GraalVM has to offer. Check some of the highlights below.
GraalVM Open Source Projects. GraalVM Community Edition is built from 3.6 million lines of code developed by the GraalVM team and collaborators, plus additional millions of lines of code from projects we depend on like Java, Node.js and others. This year our core GitHub repository passed the 10,000 stars milestone, and we added a new Open Source page, listing all our open source projects and some examples of how GraalVM advances the open source ecosystem.
GraalVM Community Workshop. This year we organized our first community workshop as a way to meet our community members in person, discuss the current project state and roadmap, and talk about ways we can improve our collaboration. It went great and we are excited to share the results — coming up in the next blog post!
JavaFX support with Gluon Substrate and GraalVM Native Image. The Gloun team introduced Gluon Substrate, a framework that leverages GraalVM Native Image to convert JavaFX applications into native executables. At the time of writing, Gluon Substrate can create executables for Linux and MacOS, with Windows support expected to be added soon.
Quarkus framework quickly became one of the hottest topics in the Java community. Leveraging GraalVM Native Image technology it offers impressive startup time and runtime memory savings. Learn how to get started with Quarkus on GraalVM.
Spring Boot applications as GraalVM native images. The Spring Boot team introduced initial support for GraalVM Native Image and a roadmap for extending this support in the immediate future. You can try different Spring Boot apps that already support GraalVM Native Image, or watch the talk by Sébastien Deleuze, a Spring Framework committer, to learn more about the current support state and plans.
New language implementations by the community. The community open-sourced GraalSqueak — a Squeak/Smalltalk implementation for the GraalVM. Also, we continue to see valuable language contributions from individuals and organizations, such as TruffleRuby contributions by Shopify.
Micronaut framework actively extended support for GraalVM, most recently in their new data access toolkit — Micronaut Data, compatible out-of-the-box with GraalVM native images. Follow this great guide to build your first GraalVM-native Micronaut app.
Helidon, Netty-based microservice framework also added GraalVM Native Image support.
Picocli is a one-file framework for creating rich Java command line applications. Check out their updated guide to create native images for Picocli applications with extremely fast startup and convenient packaging!
Release Cadence and New Features
In 2019 we published a version roadmap to make it easier for developers and related projects to plan version updates. New major versions are released every three months and the last major release of the year is supported for the next full year. We also follow Oracle’s Security Policy and produce Critical Patch Updates (CPU) releases accordingly.
The next major release — GraalVM 20.0 — will go live on February 18, 2020.
Some of the major features released in 2019 include the following.
Introducing libgraal. One of the interesting characteristics of GraalVM is its ability to internally reuse components, multiplying the benefits. A perfect example of this is libgraal — a precompiled version of the GraalVM compiler, created using GraalVM Native Image. This has several advantages, such as improving startup times and completely avoiding interference with the heap usage and profiling of application code.
Speeding up the compilation. Thanks to using profile-guided optimizations when creating libgraal and improving heuristics of our optimizations to make them less computationally intensive, we’ve been able to speed up compilation almost 2x. As a result, in the linked example, compilation required 30% less CPU time and the workload was faster by 13%, which makes a big difference for short and medium-length programs.
New tools support. GraalVM 19.2 brought a bunch of new tools: GraalVM VisualVM now supports reading Flight Recorder snapshots, we introduced the GraalVM LLVM toolchain, and also added an extension for working with GraalVM programs in VS Code.
Tracing agent for native images. Ahead of time compilation used to build native images requires additional configuration to use functionality like reflection, JNI, resources, and proxies. To simplify this, we introduced a tracing agent, that records the behavior of a Java application running and produces the configuration files automatically.
Native image class initialization updates. Since GraalVM 19.0, application classes in native images are by default initialized at run time and no longer at image build time. This provides a better out-of-the-box experience for users while still leaving the possibility to optimize startup time by running selected class initializers while creating a native image.
Improving profile-guided optimizations. PGO is an important optimization technique which allows GraalVM Native Image to achieve peak performance comparable to that of dynamically executed code, in addition to fast startup and low memory footprint. Until GraalVM 19.2, the way to collect profiling data was by creating and running an instrumented binary. This is now simplified — you can collect this data while running your program in JIT mode.
GraalVM on JDK11. Version 19.3 introduced long-awaited JDK11 support. We’ll continue providing JDK 8 builds, but if you’ve been looking to trying GraalVM on Java 11, now is the time to give it a go.
The WebAssembly support. Our idea for GraalVM is to create a universal virtual machine, so adding new languages and platforms is one of our primary goals. We are particularly happy to add support for WebAssembly, a feature highly requested by the community. GraalWasm implements the WebAssembly MVP (Minimum Viable Product) specification, and can run WebAssembly programs in binary format, generated by tools such as Emscripten. It’s still an early implementation and we working on extending it, so feedback and contributions are very welcome!
Industry Use Cases
Below are some of the interesting use cases of GraalVM we learned about this year.
Oracle Cloud Infrastructure migrated their services to GraalVM, resulting in 10% performance improvements and reducing garbage collection time by 25%.
The Dutch National Police use GraalVM to enhance their Scala applications with the R data science capabilities.
2019 was a terrific year for GraalVM. We’ve released many new features and defined plans for the next year, had productive collaboration with the community, and saw more companies embracing GraalVM. We are looking forward to what 2020 brings and as always are happy to get your feedback and feature requests via GitHub or Twitter.
Enjoy the end of the decade and have a great 2020!🎉🚀