Oleg Šelajev
Jul 2, 2018 · 4 min read

Today we released GraalVM 1.0-rc3 with both the Community Edition and the Enterprise Edition binaries publicly available for download.

GraalVM is a large project consisting of several components, and we are highlighting the most important changes to those separately.

Note that the components here are listed in no particular order.

The release notes of the previous release can be found here.

GraalVM for Java developers (GraalVM + compiler)

  • Updated the underlying JDK version to “1.8.0_172” from “1.8.0_171”. You can find the JDK release notes at the Oracle Technology Network website.
  • Fixed a rare NullPointerException during JVMCI initialization.

Native image generation

  • Added support for java.lang.reflect.Proxy supporting both automatic detection and manual configuration. Please refer to the documentation on GitHub for the details.
  • Added support for Classloader.getResource() and similar methods.
  • Added support for loading services through theServiceLoader.
  • Fixed a ClassCastException on generating native images for profile-guided-optimizations (with the--pgo-instrument command line option).


  • Enabled code sharing between Contexts with the same Engine.
  • Added support for BigInt arithmetic expressions.
  • Added a flag for the Nashorn compatibility mode --js.nashorn-compat, for the details and migration from Nashorn please refer to the documentation.
  • Rename the flag for the V8 compatibility mode to js.v8-compat.

More details can be found in the project changelog on GitHub.


The full changelog is available in the GitHub repository, but here are some of the most notable changes.

  • Added ability to call is_a? on foreign objects.
  • Fixed: Qnil/Qtrue/Qfalse/Qundef can now be used as initial value for global variables in C extensions.
  • Fixed: SIGPIPE is correctly caught on SubstrateVM, and the corresponding write() raises Errno::EPIPE when the read end of a pipe or socket is closed.
  • Fixed determining the source encoding for eval() based on the magic encoding comment.

Additionally, we implemented a number of performance improvements for stat()-related calls, eval(), String substitutions, reading from IO and more.


GraalVM Python implementation is still in the early stages, but we’re making progress towards the goal of running applications which use SciPy.

  • Various C-API improvements allow to run simple NumPy examples.
  • Implemented buffered I/O and more encodings support, which enables working with files through the standard open function without having to force unbuffered access, and enables working with files that have encodings other than utf-8.
  • Most math module functions are now implemented and work correctly.
  • The random module substitute was removed and we now run the standard library random module to be fully compatible.
  • Improved thread-safety in the embedded scenarios when using Python contexts from multiple threads.

More details are available in the project’s changelog on GitHub.


  • Added more missing R builtins and C API functions, see CHANGELOG for a complete list.
  • Simplified installation, the script that configures FastR for the current system jre/languages/R/bin/configure_fastr does not require Autotools anymore.
  • Added configuration files to allow users to build a native image of the FastR runtime, which reduces the startup time. Run jre/languages/R/bin/install_r_native_image to build the image.
  • Fixed an issue with the plotting window not displaying anything after it was closed and reopened.

LLVM interpreter for C/C++ & other native languages

  • New builtins polyglot_from_typed and polyglot_as_typed, which can be used to dynamically attach types to polyglot objects.
  • Implementers of TruffleObject can now respond to the GetDynamicType message to provide a type when an object is accessed from LLVM code.

More details are available in the project changelog.

API changes for GraalVM integrators

  • Added support for logging in Truffle languages and instruments.
  • Removed deprecated ResultVerifier.getDefaultResultVerifier API.

To see the list of changes to the APIs please refer to the project changelogs:



We improved memory footprint and introduced several UI improvements for cleaner more responsive experience of VisualVM. In addition to that, there are the following improvements:

  • Added recognition of the LLVM interpreter (Sulong) processes.
  • Improved displaying logical values of guest languages’ objects.
  • Improved the Object Query Language (OQL) Console for inspecting memory dumps functionality — sorting, filtering, aggregation, unlimited number of results now work.

Chrome inspector

  • Multiple inspector sessions for multiple polyglot engines can run on the same port now.


We will continue working on improving stability before the GA 1.0 release. If you haven’t yet done so, please give GraalVM a try on your application.

Download the binaries, try the getting started journey and see what it can do for your projects.

We are happy to receive any feedback, issues, or feature requests. Please leave them on the main GitHub repository for the project: oracle/graal. Or talk to us on Twitter: @graalvm.

Thank you from the GraalVM team!


GraalVM team blog - https://www.graalvm.org

Oleg Šelajev

Written by

Developer advocate for GraalVM at OracleLabs. VirtualJUG organizer. Became Java Champion in 2017. Likes programming languages, compilers, performance, chess



GraalVM team blog - https://www.graalvm.org

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade