- 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
21.0.0.2
(2021-02-11)
This is a bug fix release for the GraalVM 21.0.x branch. It contains operational changes to GraalVM Updater - a tool for installing optional GraalVM language runtimes and utilities, and for updating your local GraalVM installation.
- Enhanced the upgrading policies to prevent components not being upgraded when migrating from GraalVM Community to GraalVM Enterprise Edition (
gu upgrade --edition ee
). - Improved handling the license acceptance by
gu
when a user is prompted to accept “Oracle GraalVM Enterprise Edition Native Image License”.
21.0.0
(2021-01-19)
Java
Updated the underlying JDK GraalVM is built on:
- GraalVM Community Edition is based on OpenJDK version 1.8.0_282 and OpenJDK version 11.0.10.
- Oracle GraalVM Enterprise Edition is based on Oracle JDK version 1.8.0_281 and Oracle JDK version 11.0.10. You can find Oracle JDK release notes for these versions at Oracle Java SE Downloads.
Java on Truffle
- Added an experimental Java Virtual Machine implementation based on a Truffle interpreter. Read more here.
Container Images
GraalVM Community images for Docker containers changed the location and now are available from GitHub Container Registry. See the guide.
Platforms Support
As of this version, we provide GraalVM distributions for Linux on AArch64 system. All components including the GraalVM core are experimental. GraalVM Enterprise Edition is based on Oracle JDK11 for AArch64, and GraalVM Community Edition on OpenJDK 11 for AArch64 architecture accordingly.
Native Image
- Added serialization support for Native Image. The serialization support ensures constructors for classes are contained in a native image, so that they can be deserialized in the first place. These classes should be whitelisted in an additional specific configuration file, similar to the Reflection continuation, as some classes cannot be deserialized, including classes that might be part of the native image, but not listed in the configuration file. You can either create a configuration file manually or apply a Tracing Agent, provided with GraalVM, to help writing the configuration files.
- Added method handle invocation support for Native Image (see #2761). Methods and fields accessed through method handles have to be registered in the Reflection configuration file. Also added method handles support to the Tracing agent to automatically generate the configuration for the native image build. Most use cases of method handles are supported. VarHandles that are not stored in static fields are still not supported.
- Added AWT and Swing support for the Linux platform (configuration collection with the Tracing agent is necessary).
- Added the experimental
-H:+InlineBeforeAnalysis
option to reduce the number of required configuration entries and lessen the image size. - Improved the Tracing agent: it now captures instances of
Class.getClasses
andClass.getDeclaredClasses
. - Improved the
ServiceLoaderFeature
class to scan for services declared using modules. - Disallowed the instances of
Random
in the native image heap. - Improved GC performance (less time spent in GC).
Updates for Language and Tool Implementers Using Truffle API
- Fixed many issues related to multi-tier compilation. Multi-tier compilation (
--engine.MultiTier
) will be enabled by default in 21.1. - Added
HostCompilerDirectives
for directives that guide the host compilations of the Truffle interpreters: HostCompilerDirectives.BytecodeInterpreterSwitch
to denote methods that contain the instruction-dispatch switch in bytecode interpretersHostCompilerDirectives.BytecodeInterpreterSwitchBoundary
to denote methods that do not need to be inlined into the bytecode interpreter switch- Truffle DSL generated nodes are no longer limited to 64 state bits. Use these state bits responsibly.
- More changes are listed in the changelog.
Updates for Polyglot Embedders
- Added support for explicitly selecting a host method overload using the signature in the form of comma-separated fully qualified parameter type names enclosed by parentheses (e.g.,
methodName(f.q.TypeName,java.lang.String,int,int[])
). - Deprecated the host method selection by JNI mangled signature, replaced by the aforementioned new form. Scheduled for removal in 21.2.
JavaScript
- Updated Node.js to version 12.20.1.
- Enabled the following ECMAScript 2021 mode/features by default:
- Class fields
Promise.any
String.prototype.replaceAll
- Logical Assignment Operators
- Adopted a new interop exception handling and made JS exceptions extend the
AbstractTruffleException
class. - Exposed
Graal.versionECMAScript
instead ofGraal.versionJS
. - Implemented the relative indexing method proposal. It is available in ECMAScript 2022 mode (
--js.ecmascript-version=2022
).
Python
- Added the
jarray
module for compatiblity with Jython. - Improved the support for Pandas and added the initial support for the Matplotlib visualization library.
- Provided fixes to avoid possible memory leaks and crashes when running NumPy in a shared engine.
- Fixed an infinite continuation prompt in REPL when pasting snippets.
More details can be found in the changelog.
Ruby
- The new IRB is quite slow when copy/paste code into it. This is due to an inefficient
io/console
implementation which will be addressed in the next release. A workaround is to useirb --readline
, which disables some IRB features but is much faster for copy/pasting code.
New features:
- Updated to Ruby 2.7.2. Most Ruby 2.7 features and changes are implemented (see #2004).
Bug fixes:
- Fixed setting of special variables in enumerators and enumerables (issue #1484).
- Fixed issue with
Method#to_proc
and special variable storage (issue #2156).
Compatibility:
**kwargs
now accept non-Symbol keys like Ruby 2.7.
Performance:
- Refactor and implement more performant
MatchData#length
(see #2147). - Refactor and implement more performant
Array#sample
(see #2148). String#inspect
is now more efficient.
Changes:
- All
InteropLibrary
messages are now exposed consistently as methods onTruffle::Interop
(see #2139). Some methods were renamed to match the scheme described in the documentation. - More details are available from the changelog.
R
- Fixed
AssertionError
when trying to install the R validate package (issue #169).
LLVM runtime
- Improved the AST sharing, and support for the auxiliary engine caching. On top of the regular AST sharing that allows sharing code between multiple contexts in a single engine, this allows persisting of shared code across process boundaries.
- Added support for the current major release of macOS (macOS Big Sur).
Deprecations:
- Added a deprecation warning for the old header files locations
polyglot.h
andllvm/api/toolchain.h
. These header files have been already deprecated in 20.3.0, but without a warning.
GraalWasm
- This release included a large number of bugfixes in semantics, linking and in-module validation. GraalVM’s WebAssembly interpreter now passes almost all tests from the official specification test suite.
- Exposed
Polyglot
bindings that are needed for the JS-to-WebAssembly Interface API. - Optimized the GraalWasm interpreter, leading to warmup and an overall 20x peak performance improvement of the interpreted execution mode.
- Improved the security by using the byte-buffer-based memory instead of the off-heap memory.
Tooling
GraalVM Updater
Starting from version 21.0, GraalVM Updater has become more powerful and can be used to update your GraalVM local installation to a newer version or upgrade from a Community to Enterprise Edition. Read more in Upgrade GraalVM.
Visual Studio Code Extensions
- Added refactoring and other productivity features.
- Published GraalVM 21.0 Extension Pack for Visual Studio Code on VS Code Marketplace. Read more on the advancements and modifications here.
GraalVM Dashboard
- Improved the BGV format to support large amount of integer properties.
VisualVM
- Enabled a seamless import of settings from the previous installations of VisualVM.