GraalVM v.19.2 Released with Preview of Java Flight Recorder Support

The GraalVM 19.2 feature release, announced last week, comes with a number of significant enhancements, including improved profile-guided optimizations, an LLVM toolchain, and preview of new Java Flight Recorder support. It also comes with improved native image peak performance and a simplified process for collecting data for profile-guided optimizations (PGOs) for GraalVM Enterprise native images.

The GraalVM is an extension of the JVM designed to run applications written in a range of languages, including JavaScript, Python, Ruby, and R; JVM-based languages, such as Java, Scala, and Kotlin; and LLVM-based languages, such as C and C++. Graal is the Java-based JIT compiler (JEP 317) that is the basis of the experimental AOT compiler introduced in JDK 9. Oracle's GraalVM Enterprise Edition is built on Oracle's enterprise-class Java SE.

Among other enhancements, this release comes with a preview of new support for the Java Flight Recorder (JFR) in the form of a plugin for the VisualVM tools bundle included with the GraalVM. The JFR is a profiling and event-collection framework designed to allow developers and administrators to assemble detailed low-level information about how the JVM and the app are behaving. The plugin reads all JFR snapshots created from Java 7 and newer versions, and presents the data in typical VisualVM views familiar to users.

This JFR support is currently an experimental feature (not supported). Some advanced features, such as the ability to analyze JVM internals or show event stack traces, and support for creating JFR snapshots from live processes, are not available in the preview. Oracle says it will address these features "incrementally in the following releases."

The list of updates and enhancements in this release also includes:

  • A simpler process for collecting data for PGOs for GraalVM Enterprise native images. PGOs allow developers to optimize the performance of native images by analyzing collected profiles during the image generation process. With this version, developers can collect data for PGOs while running their applications in a just-in-time (JIT) compiled mode.
  • Improved throughput for native images in GraalVM Enterprise when no profiles are available.
  • JavaScript updates, including new support for date, time, time zone, instant, and duration interoperability types to distinguish date-like objects from multiple languages in polyglot.
  • Preliminary support for compiling native programs to bitcode using the LLVM toolchain. The LLVM toolchain is a set of tools and APIs for compiling native projects, such as C and C++, to bitcode that can be executed with the GraalVM LLVM runtime. Its purpose is to simplify ahead-of-time compilation for users and language implementers who want to use the GraalVM LLVM runtime.
  • New support for Ruby, R, and Python.
  • API changes for GraalVM Integrators, including the ability to configure custom polyglot access configuration with PolyglotAccess.newBuilder(), which allows for the configuration of fine-grained access control for polyglot bindings and among polyglot languages.

In her announcement of the GraalVM 19.2 release on Medium, GraalVM developer advocate Alina Yurenko included a version roadmap with release dates and information about updates. That roadmap is also available on the GraalVM Web site.

About the Author

John K. Waters is the editor in chief of a number of sites, with a focus on high-end development, AI and future tech. He's been writing about cutting-edge technologies and culture of Silicon Valley for more than two decades, and he's written more than a dozen books. He also co-scripted the documentary film Silicon Valley: A 100 Year Renaissance, which aired on PBS.  He can be reached at [email protected].