- GraalVM Release Calendar
- GraalVM for JDK 23
- GraalVM for JDK 22
- GraalVM for JDK 21
- GraalVM for JDK 20
- GraalVM for JDK 17
- GraalVM 22.3.x
- GraalVM 22.2.x
- GraalVM 22.1.x
- GraalVM 22.0.x
- GraalVM 21.3.x
- GraalVM 21.2.x
- GraalVM 21.1.x
- GraalVM 21.0.x
- GraalVM 20.3.x
- GraalVM 20.2.x
- GraalVM 20.1.x
- GraalVM 20.0.x
- GraalVM 19.3.x
20.0.0
(2020-02-18)
GraalVM Platform Updates
GraalVM 20.0 improves significantly on the previously available GraalVM builds
for Windows platforms. Windows is no longer an experimental platform in the GraalVM ecosystem.
Windows builds now contain the functional gu
utility to install the
components. GraalVM Native Image component needs to be installed
with gu
as on other platforms. JavaScript engine is now included in the GraalVM Windows distribution. Node.js support on the Windows platform is scheduled to be included in the next GraalVM release (20.1).
GraalWasm, the WebAssembly component, is distributed through the usual component distribution channels.
The GraalVM distribution for AArch64 now includes a functional node.js
runtime (both in --jvm
and native modes).
Java
- GraalVM Community Editions are based on OpenJDK version 1.8.0_242 and OpenJDK version 11.0.6.
- GraalVM Enterprise Editions are based on Oracle JDK version 1.8.0_241 and Oracle JDK version 11.0.6. You can find the JDK release notes at the Oracle Technology Network website.
- Added mitigation of Jump Conditional Code (JCC) Erratum (see #1829).
- GraalVM has a default setting of
ThreadPriorityPolicy=1
, which means thread priorities set in Java are reflected by native operating sytstem thread priorities. This may affect Java application performance.
Native Image
- Native Image support on Windows has significantly advanced. Please report issues if you find any problems.
- Native images built with GraalVM Enterprise can now include a G1-based low-latency garbage collector that reduces stop-the-world pauses and improves latency. It is an experimental feature that can be enabled at image build time with
-H:+UseLowLatencyGC
. For more details, please refer to the documentation. - Fixed several Java Native Interface (JNI) and JDK11 related issues, please refer to GitHub for more information.
JavaScript
- Updated Node.js to 12.15.0, please see Node.js 12.15.0 release notes.
- Added the
js.commonjs-require
option to load npm-compatible CommonJS modules from plain JavaScript. This is an experimental feature. See NodeJSVSJavaScriptContext.md for details. - Added the
js.load-from-classpath
option to allow loading files from the classpath via theclasspath:
pseudo URLs (disabled by default). Its usage is not recommended with untrusted code. - Added the implementation of the
String.prototype.replaceAll
proposal. It is available in ECMAScript 2020 mode (--js.ecmascript-version=2020
). - Updated
String.prototype.matchAll
to be available only in ECMAScript 2020 mode (--js.ecmascript-version=2020
). - Added the
js.bind-member-functions
option for the implicit binding of unbound functions returned byValue.getMember
to the receiver. The preferred way of calling members is usingValue.invokeMember
. - Made the support for Nashorn pseudo URLs available only in the Nashorn compatibility mode (
--js.nashorn-compat
). - Implemented support for public and private class fields, including static fields. This feature can be enabled using the experimental option
js.class-fields
and is available by default in Node.js. - Added the
js.global-arguments
option withtrue
as a default value for the non-standard arguments global property.
More details can be found in the project changelog on GitHub.
LLVM Runtime
- The toolchain is now based on LLVM 9.0.0.
- Support accessing
llvm-ar
,llvm-nm
,llvm-objcopy
,llvm-objdump
,llvm-ranlib
,llvm-readelf
,llvm-readobj
andllvm-strip
via the toolchain.
For more details refer to the component changelog on GitHub.
Python
- Improved Jython Compatibility by implementing syntax
from JavaType import *
to import all static members of a Java class, and by enabling import of Python code from insideJAR
files by addingpath/to/jarfile.jar!path/inside/jar
tosys.path
. - Added support for date and time interop.
- Added support for setting the time zone via
Context.Builder.timeZone
. - Implemented PEP 570 - Python Positional-Only Parameters.
To see a complete list of changes, please refer to the project changelog.
R
- On Linux, the required version of
libgfortran
changed from 3 to 5. See the requirements section for details. - Implemented subsetting an array by numeric and/or string matrix.
- Fixed an issue where polyglot value is not an object (see #123).
- Fixed an issue with the incorrect formatting for
sprintf %g
and%G
(trailing zeroes, see #126). - Added R builtins and C APIs:
More details can be found in the project changelog on GitHub.
Ruby
A detailed changelog for the Ruby component is available on GitHub.
- Updated to Ruby 2.6.5 (see #1749).
- Updated the internal LLVM toolchain to LLVM 9 and reduce its download size.
- Automatically set
PKG_CONFIG_PATH
as needed for compiling OpenSSL on macOS (see #1830). - Performance improvements related to sockets and
RSTRING_PTR
. - 100+ compatibility and bug fixes, please refer to the changelog.
Changes for GraalVM Embedders (SDK)
- The deprecated
graalvm.home
andgraalvm.version
system properties have been removed, use the HomeFinder instead. - Added
EventContext.createError
which allows to introduce guest application errors in execution listeners/nodes. - Added
Context.Builder.currentWorkingDirectory
to set the current working directory used by the guest application to resolve relative paths. - The algorithm used to generate a unique URI for a Source built without an URI was changed to
SHA-256
. - All Truffle Graal runtime options (
-Dgraal.
) will be deprecated with 20.1. The Truffle runtime options are no longer specified as Graal options (-Dgraal.
). The Graal options must be replaced by corresponding engine options specified using the polyglot API. TheTRUFFLE_STRICT_OPTION_DEPRECATION
environment variable can be used to detect usages of deprecated GraalVM options. When theTRUFFLE_STRICT_OPTION_DEPRECATION
is set to true and the deprecated Graal option is used, the Truffle runtime throws an exception listing the used deprecated options and corresponding replacements.
More details are in the SDK and Truffle changelogs.
Tooling
- Added an option for
gu
to install all available components from a local directory, for example:gu install -C /path/to/downloaded/20.0-components/ native-image llvm-toolchain ruby r python wasm
. - Added a JDK Flight Recorder Data Viewer to VisualVM.
- Added an integration of T-trace instrumentation framework with OpenTracing.
- Added LLVM languages support to T-trace instrumentation framework
- Added a Technology Preview of the Language Server Protocol implementation for GraalVM languages and its support to GraalVM VSCode Extensions.