GraalVM v.19.1 Released

The GraalVM team at Oracle Labs announced the latest release of the GraalVM (version 19.1) last week. Version 19.0 was release in May, and though this is just a point release, it comes with some significant fixes and updates. (The release notes are available here.)

The core download contains a Java SE 8 compliant JVM (1.8.0_212), a Node.js implementation (v10.15.2), a JavaScript implementation (ECMAScript 2019), and an LLVM bitcode runtime (6.0.0).

This release includes two changes that should be of interest to Java developers:

  • Improved speed of just-in-time (JIT) compilation, which significantly improves the performance on medium length workloads.
  • Applied profile-guided optimization (PGO) when building the ahead-of-time (AOT) image of the compiler. This enables more aggressive optimization of the compiler itself providing better compilation throughput.

For JavaScript developers, the GraalVM team:

  • Added an experimental option js.locale to set the default locale for locale-sensitive operations.
  • Made it possible to make evaluated sources internal using the sourceURLdirective by prefixing the URL with internal: for example, //# sourceURL=internal:myname.js.
  • Enabled code sharing across threads using ContextPolicy.SHARED.

For the GraalVM Ruby implementation:

  • Interactive sources (like the GraalVM polyglot shell) now all share the same binding (#1695).
  • Hash code calculation has been improved to reduce hash collisions for Hash and other cases.
  • eval(code, binding) for a fixed code containing blocks is now much faster. This improves the performance of rendering ERB templates containing loops.
  • rb_str_cat is faster, thanks to the C string now being concatenated without first being converted to a Ruby string or having its encoding checked.

And for the Python jocks:

  • Updated Python standard library files from 3.7.0 to 3.7.3.
  • Improved performance of exceptions that do not escape.
  • Fixed caching of core sources in a native image with a preinitialized context for pre-built images and libpolyglot fast startup.
  • Implemented support for pwd.getpwuid, os.exec, os.execv, and os.execl modules.

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.

Thomas Wuerthinger, senior research director at Oracle Labs, and GraalVM project lead, announced this release in a post on Medium: "One of the challenges of JIT compilation systems is the need to make the compilation step as fast as possible," he wrote. "... We, therefore, made several improvements for increased just-in-time compilation speed. Specifically, we are now using profile-guided optimizations when creating the native image for our compiler itself. Also, we improved heuristics of our optimizations to make them less computationally intensive. The result is almost twice the compilation speed ..."

The first version of the GraalVM was released in April 2018. Two versions of the GraalVM are currently available: a free Community Edition and a fee-based Enterprise Edition. The free version was built from the GraalVM sources available on GitHub, and it's available for development and production use.

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].