Introduction to GraalVM

GraalVM is a high-performance runtime that provides significant improvements in application performance and efficiency which is ideal for microservices. It is designed for applications written in Java, JavaScript, LLVM-based languages such as C and C++, and other dynamic languages. It removes the isolation between programming languages and enables interoperability in a shared runtime.

GraalVM system diagram

The preceding diagram illustrates the architecture of GraalVM as an open ecosystem.

The virtualization layer represents programming languages, provided by GraalVM. The execution of guest programming languages, namely JavaScript, Ruby, R, Python and LLVM bitcode, in the same runtime as the host JVM-based application is now down-to-earth. The host language and guest languages can directly interoperate with each other and pass data back and forth in the same memory space.

The bottom part demonstrates the applicability range. GraalVM can either run standalone, be embedded as part of the OpenJDK or Node.js platforms, or even execute inside Oracle Database.

GraalVM Distributions #

GraalVM is available as GraalVM Community and GraalVM Enterprise editions. GraalVM Community editions are based on OpenJDK version 1.8.0_282 and on OpenJDK version 11.0.10. GraalVM Enterprise editions are based on Oracle JDK version 1.8.0_281 and on Oracle JDK version 11.0.10.

GraalVM distributions are available for Linux, macOS, and Windows platforms on x86 64-bit systems, and for Linux on ARM 64-bit systems. The GraalVM distribution for AArch64, **graalvm-ce-java11-linux-aarch64-**, is currently under development and is provided for evaluation and testing use [on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases).

Note: The base GraalVM binary including all its components is experimental on Linux/ARM and Windows.

All editions are shipped as a .tar.gz file. For installation, it is sufficient to unpack the respective archive and set the JAVA_HOME variable on the unpacked directory. Continue reading to Getting Started with GraalVM.

Distribution Components List #

GraalVM cconsists of core and additional components. The core components enable using GraalVM Enterprise as a runtime platform for programs written in JVM-based languages or embeddable polyglot applications.

Core Components #

Runtimes

  • Java HotSpot VM
  • Node.js JavaScript runtime
  • LLVM runtime

Libraries (JAR files)

  • GraalVM compiler - the top-tier JIT compiler
  • Polyglot API – the APIs for combining programming languages in a shared runtime

Utilities

  • JavaScript REPL with the JavaScript interpreter
  • lli tool to directly execute programs from LLVM bitcode
  • GraalVM Updater to install additional functionalities

Additional Components #

GraalVM base installation can be extended with the additional components.

Tools/Utilities:

  • Native Image – a technology to compile an application ahead-of-time into a native executable.
  • LLVM toolchain – a set of tools and APIs for compiling native programs to bitcode that can be executed with on the GraalVM runtime.

Language Runtimes:

  • Python – Python 3.8.5 compatible
  • Ruby – Ruby 2.7.2 compatible
  • R – GNU R 3.6.1 compatible
  • GraalWasm – WebAssembly (Wasm)

Note: Python, R, Ruby, and GraalWasm are experimental and not recommended for production use at this time.

GraalVM Documentation #

Whether you are here to try running an application with GraalVM for the first time or ready to start coding with the GraalVM Polyglot APIs, check out our documentation to help you on your way.

Alternatively you can have a look at GraalVM SDK Java API Reference and GraalVM Truffle Java API Reference. For example:

  • The Polyglot Package allows you to configure and run polyglot applications.
  • The Proxy Package allows you to mimic the guest language objects using proxies.
  • The IO Package allows you to customize the file system access of languages.
  • The Truffle API allows to implement your own Truffle based language.

If you cannot find the answer you need or have a troubleshooting query, get in touch with us.