Что такое GraalVM и для чего она используется?

«Что такое GraalVM и для чего она используется?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GraalVM — это высокопроизводительная универсальная виртуальная машина (VM) от Oracle, предназначенная для запуска приложений на JVM-языках (Java, Scala, Kotlin), JavaScript, Python, Ruby и других. Её ключевые компоненты:

  1. Graal JIT-компилятор: Оптимизирующий компилятор "Just-In-Time" для HotSpot JVM, который может генерировать более эффективный машинный код, чем стандартный C2, особенно для длительно работающих приложений.
  2. Native Image (AOT-компиляция): Технология для компиляции Java-приложений ahead-of-time в автономный нативный исполняемый файл (бинарник). Это кардинально уменьшает время запуска и потребление памяти.
  3. Полиглотные возможности: Позволяет вызывать код на одном языке (например, Python) из программы на другом (например, Java) в рамках одной VM.

Пример создания Native Image:

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Native Image!");
    }
}

Компиляция и создание нативного бинарника:

javac HelloWorld.java
native-image HelloWorld
# Создается исполняемый файл `helloworld`

Преимущества Native Image:

  • Мгновенный запуск: Нет затрат на JIT-разогрев и загрузку JVM.
  • Низкое потребление памяти: Исполняемый файл содержит только необходимый код.
  • Идеально для: Микросервисов, serverless-функций (AWS Lambda), CLI-утилит и контейнерных сред, где критичны быстрый старт и маленький размер.

Ограничения (для Native Image): Использование динамических возможностей (например, рефлексия, динамическая загрузка классов, прокси) требует явной конфигурации во время компиляции (через файлы конфигурации или агент).