- 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.3.6
(2022-04-26)
This is April 2022 Critical Patch Update (CPU) for GraalVM Community Edition. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community Edition 20.3.5.
The OpenJDK release that GraalVM Community Edition is built on was updated to 11.0.15 for Java 11-based GraalVM Community. See OpenJDK 11.0.15 Updates.
20.3.5
(2022-01-18)
This is January 2022 Critical Patch Update (CPU) for GraalVM Community Edition. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community Edition 20.3.4.
The OpenJDK release that GraalVM Community Edition is built on was updated to 11.0.14 for Java 11-based GraalVM Community. See OpenJDK 11.0.14 Updates.
20.3.4
(2021-10-19)
This is October 2021 Critical Patch Update (CPU) for GraalVM Community Edition. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community Edition 20.3.x.
GraalVM Community Edition 20.3.4 was updated to 11.0.13 for Java 11-based GraalVM Community. See OpenJDK 11.0.13 Updates.
20.3.3
(2021-07-20)
GraalVM Community Edition 20.3.3 is a Critical Patch Update (CPU) release. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community Edition 20.3.x.
It also includes:
- update to 8u302 for Java 8 based GraalVM Community, please see OpenJDK 8u302 Updates.
- update to 11.0.12 for Java 11-based GraalVM Community, please see OpenJDK 11.0.12 Updates.
20.3.2
(2021-04-20)
GraalVM Community Edition 20.3.2 is a Critical Patch Update (CPU) release. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community Edition 20.3.x.
It also includes:
- update to 8u292 for Java 8-based GraalVM Community, please see OpenJDK 8u292 Updates
- update to 11.0.11 for Java 11-based GraalVM Community, please see OpenJDK 11.0.11 Updates
- Node.js runtime update to 12.22.1 which contains all security fixes mentioned in April 2021 Security Releases
20.3.1.2
(2021-02-11)
This is a bug fix release for the GraalVM 20.3.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”.
20.3.1
(2021-01-19)
GraalVM Community Edition 20.3.1 is a Critical Patch Update (CPU) release. It is based on OpenJDK CPU and includes all the OpenJDK security fixes released as part of that CPU. It is a full distribution and supersedes the previous release of GraalVM Community 20.3.0.
It also includes the following:
- Update to OpenJDK version 8u282 for Java 8-based GraalVM Community, please see please see OpenJDK 8u282 Updates.
- Update to OpenJDK version 11.0.10 for Java 11-based GraalVM Community, please see OpenJDK 11.0.10 Updates.
20.3.0
(2020-11-17)
Java
- GraalVM Community Edition is based on OpenJDK version 1.8.0_272 and OpenJDK version 11.0.9.
- Oracle GraalVM Enterprise Edition is based on Oracle JDK version 1.8.0_271 and Oracle JDK version 11.0.9. You can find Oracle JDK release notes for these versions at the Oracle Technology Network website.
- Improved eliminating or delaying class loading from
libgraal
until after its initialization. This improves performance on workloads with very short iterations (in milliseconds). It also fixes problems related to VM assumptions about the JIT compiler not loading classes, which could lead to races and sometimes deadlocks. - Improved conditional move optimization: GraalVM Enterprise contains an optimization that uses the CPU’s
conditional move (
CMOV
) instruction to implement certain conditional statements. In this release we have improved this optimization to give higher and more predictable performance for workloads sensitive to conditional move instructions. (Only available in GraalVM Enterprise.) - Improved heuristics in GraalVM Enterprise for loop peeling optimization for workloads where the first iteration initializes array objects lazily. This is a common pattern in GraalVM’s Python runtime of Python iterators. It results in performance improvements for micro Python benchmarks of up to 40%. (Only available in GraalVM Enterprise.)
- Improved code generated by GraalVM Enterprise for initializing newly allocated arrays, fixing a performance issue where large array allocations were initialized twice. (Only available in GraalVM Enterprise.)
- Improved the heuristics for the code duplication optimization in GraalVM Enterprise which gives a peak performance improvement of up to 17% on some LLVM workloads and a 5% increase on some Java workloads. (Only available in GraalVM Enterprise.)
Native image
- Improved container awareness: on Linux, the resource limits - processor count,
memory size - are read from cgroup
V1
andV2
configurations. The processor count can also be overridden on the command line using the option-XX:ActiveProcessorCount=
. - Improved the “isolated compilation” that separates applications and the runtime compiler from each other, which improves performance by reducing interference between them, for example, due to garbage collection.
- The G1 garbage collector now also supports
native images that use runtime-compiled code. It can be enabled at image build
time using the option
--gc=G1
. G1 support is currently limited to Linux on AMD64. Windows and macOS support will be available in future releases. G1 now also supports performance counters (when the image is built with-H:+AllowVMInspection
). (Only available in GraalVM Enterprise.) - Improved the options to enable and disable assertions which now support the full
syntax to specify package and class names. Assertions need to be configured at
image build time, using the options
-ea
/-da
/-esa
/-dsa
. The definition of “system assertions” is expanded to not only include assertions in the JDK, but also in the Native Image runtime system, for example, in the garbage collector implementation. - Added basic debug information generation on Windows (developed in collaboration with Red Hat).
- Added many small performance and memory footprint optimizations. In particular,
a new implementation of type checks improves the performance of
Class.isInstance
andClass.isAssignableFrom
with less type data in the image heap. - Added support for method handles that represent a call to a single method
accessible by the Reflection API, with no transformations applied through the
Method Handles API, such as calls to
MethodHandle.bindTo()
orMethodHandle.asType()
. To enable this feature use--report-unsupported-elements-at-runtime
. - Many other bug fixes and improvements which can be found in the GitHub repository.
Updates for Language and Tool Implementers
- Enabled by default the elastic allocation of the compiler threads depending
on the number of available processors, in both JVM and native modes. The old
behaviour, 1 or 2 compiler threads, can be explicitly enabled with
--engine.CompilerThreads=0
. - Added
ThreadsActivationListener
to listen to the thread enter and leave events in instruments. - Added new flags to inspect the expansion during partial evaluation:
--engine.TraceMethodExpansion=truffleTier
,--engine.TraceNodeExpansion=truffleTier
,--engine.MethodExpansionStatistics=truffleTier
and--engine.NodeExpansionStatistics=truffleTier
. Language implementations are encouraged to run with these flags enabled and investigate their output for unexpected results. See Optimizing.md for details. - Added
TruffleInstrument.Env.getOptions(TruffleContext)
to retrieve context specific options for an instrument andTruffleInstrument.getContextOptions()
to describe them. This is useful if an instrument wants to be configured per context. - Added the ability to create context and context thread locals in languages and instruments. See
ContextLocal
andContextThreadLocal
classes for details. - Added
NodeLibrary
, which provides guest language information associated with a particularNode
location, the local scope mainly andTruffleLanguage.getScope
andTruffleInstrument.Env.getScope
, which provides a top scope object of a guest language. - Added
ByteArraySupport
: a helper class providing safe multi-byte primitive type accesses from byte arrays. - Added a new base class for the exceptions, see
AbstractTruffleException
. The originalTruffleException
has been deprecated. Added new interop messages for exception handling replacing the deprecatedTruffleException
methods. - Added new specialization utility to print detailed statistics about specialization instances and execution count. See Specialization Statistics for details on how to use it.
- More details are available from the changelog.
Updates for Polyglot Embedders
- Added
Context.interrupt(Duration)
to interrupt a polyglotContext
execution. The interrupt is non-destructive meaning that the polyglotContext
can still be used for further execution. - Added the ability to specify a
TargetMappingPrecedence
of target type mappings forHostAccess
configurations that influence conversion order and precedence in relation to default mappings and other target type mappings. - Added a
log.file
option that allows redirection of all languages, instrument or engine logging to a file. The handler configured with theContext.Builder.logHandler
method has precedence over the new option. - Added experimental sandbox resource limits for languages implemented on top of the Truffle language implementation framework. (Only available in GraalVM Enterprise.)
- More details are available from the changelog.
JavaScript
- Updated Node.js to version 12.18.4.
- Fixed field/getter/setter access order in a Nashorn compatibility mode, see #343.
- Fixed “Multiple applicable overloads found” error in a Nashorn compatibility mode, see #286.
- Enabled low precedence lossy number, string-to-boolean, and number-to-boolean conversions in a Nashorn compatibility mode.
- Fixed
Java.extend
to respectHostAccess.Builder.allowImplementations
, see #294. - Added Java host interoperability support for mapping JavaScript objects to abstract classes (if
HostAccess
allows it). - Added
js.foreign-object-prototype
as a supported option to set JavaScript prototypes for foreign objects mimicing JavaScript types. It was renamed fromjs.experimental-foreign-object-prototype
. - Changed
ToPrimitive
abstract operation to follow the specification for foreign objects.InteropLibrary.toDisplayString
is not used byToPrimitive/ToString
conversions anymore.
Ruby
- Added handling foreign null object as falsy value (#1902).
- Improve reliability of the post install hook by disabling RubyGems (#2075).
- Fixed the top level exception handler to print exception cause (#2013).
- Fixed handling of post arguments for
super()
(#2111). - Fixed constant/identifier detection in lexer for non-ASCII encodings (#2079, #2102).
- Fixed parsing of
--jvm
as an application argument (#2108). - Added checking bounds for
FFI::Pointer
accesses when the size of the memory behind is known. - Implemented negative line numbers for
eval
(#1482). - Migrated from JLine 2 to JLine 3 for the
readline
standard library. - Added various warmup improvements, notably much less splitting and more operations are done inline, without a call.
- Improved setting and access to the special variables
$~
and$_
which has been refactored to require less splitting. - More details are available from the changelog.
R
- Improved compatibility with a preliminary implementation of the ALTREP framework: http://homepage.stat.uiowa.edu/~luke/talks/uiowa-2018.pdf
- Exposed native function
match5
, which is necessary for R packagefastmatch
. - Added a few more smaller compatibility fixes and implemented missing APIs.
- More details are available from the changelog.
Python
- Updated Python to version 3.8.5.
- Added the experimental new HPy native API, so it is possible run
piconumpy
through HPy now. - The standalone
graalpython
version can now be installed throughpyenv
. - Many fixes to pass the unittests of standard library types and modules:
complex
,bytes
,bytearray
, subclassing of special descriptors, type layouts,float
,generators
,modules
, argument passing corner cases, string literals and encodings,import
andimportlib
,decimal
,glob
, thebuiltin
module,json
,math
,operator
, numeric tower,sys
,warnings
,random
,f-strings
,struct
,itertools
,super
.
LLVM runtime
- Added support for code sharing in the GraalVM LLVM runtime. This allows the AST and compiled code of common bitcode libraries to be shared between multiple contexts within a single engine improving performance.
- Updated LLVM toolchain to version 10.0.0.
- Improved for
va_list
/varargs
handling across language boundaries. Usingva_start
in an LLVM function that was called from a foreign language no longer forces all arguments into native memory. The resultingva_list
object can be passed to code written in other languages, and accessed there using standard interop APIs. - Introduced the Handles API for storing managed pointers in native memory.
- Moved
polyglot.h
tograalvm/llvm/polyglot.h
andllvm/api/toolchain.h
tograalvm/llvm/toolchain-api.h
. The old header locations are deprecated, and will be removed in a future release. - Renamed
libpolyglot-mock.so
tolibgraalvm-llvm.so
. The old name is deprecated and will be removed in a future release.
Tooling
Visual Studio Code Extensions
- Enhanced a VSCode GraalVM Extension with:
- Java syntax highlighting
- Java code completion
- Installation wizard to download and install GraalVM Community or GraalVM Enterprise from the UI
- Integrated Java debugger with all the features you would expect from a full featured IDE debugger like the Netbeans IDE
- Integrated Polyglot debugger allowing to debug Javascript, Python, R, Ruby and other GraalVM languages
- Implemented a VS Code Micronaut extension which:
- Leverages all the great features of the Graal VS Code Extension for Java
- Includes a Micronaut project wizard for creating new Micronaut applications
- Includes Gradle and Maven support
- Includes support to easily create a native executable from a Micronaut Gradle application using GraalVM Native Image
GraalVM Dashboard
- Re-implemented GraalVM Dashboard with OracleJET.
- Updated GraalVM Dashboard to accept new in Native Image dump format in BGV.