GraalVM에서 OpenJDK로 넘어갔고 앞으로 넘어갈것 같은 기능들

Sunghyun Roh
7 min readFeb 21, 2023

--

GraalVM은 범용 가상 머신으로, 다양한 언어와 프레임워크를 지원하고 다양한 기능을 제공합니다. GraalVM에서 먼저 출시된 기능 중 일부는 이후 OpenJDK로 이전되어 OpenJDK에서도 사용할 수 있게 되었습니다. 이번 글에서는 GraalVM에서 먼저 출시된 기능이 나중에 OpenJDK로 포함된 기능에 대해 알아보겠습니다.

  1. Java Flight Recorder (JFR)

Java Flight Recorder는 Java 애플리케이션의 성능 모니터링 및 분석을 위한 도구입니다. GraalVM에서는 JFR을 2019년 2월에 기본적으로 포함했으며, 이후 2019년 3월에 OpenJDK 11.0.3 버전에서 JFR이 포함되었습니다. JFR은 애플리케이션 실행 중에 발생하는 이벤트 데이터를 수집하고 저장하며, 이를 통해 애플리케이션의 성능 문제를 식별하고 해결할 수 있습니다. 이전에는 Oracle JDK에서만 사용할 수 있었던 JFR이 OpenJDK에서도 사용 가능해졌기 때문에, 더 많은 사용자가 JFR을 활용할 수 있게 되었습니다.

Java Flight Recoder

2. Graal Compiler

Graal Compiler는 GraalVM에서 사용되는 JIT (Just-In-Time) 컴파일러입니다. Graal Compiler는 최신의 최적화 기술을 적용하여 빠른 성능을 제공합니다. 이전에는 HotSpot VM에서만 사용 가능했던 Graal Compiler는 OpenJDK 10부터 실험적으로 지원되었으며, 이후 2018년 9월에는 OpenJDK 11에서도 정식으로 지원되었습니다. Graal Compiler가 OpenJDK에서도 사용 가능해졌기 때문에, 더 많은 사용자가 최신의 최적화 기술을 활용할 수 있게 되었습니다.

3. Shenandoah GC

Shenandoah GC는 대용량 힙에 대한 저지연 수집기(Garbage Collector)입니다. GraalVM 1.0.0 버전에서 처음 도입되었으며, 이후 OpenJDK 12부터는 실험적으로 지원되었습니다. Shenandoah GC는 큰 힙에서도 매우 짧은 GC 지연 시간을 제공하며, 대규모 애플리케이션에서의 GC 성능을 향상시킵니다. Shenandoah GC가 OpenJDK에서도 사용 가능해졌기 때문에, 더 많은 사용자가 대용량 메모리 애플리케이션을 개발할 수 있게되었습니다.

Shenandoah GC

4. ZGC

ZGC는 대규모 메모리와 대규모 애플리케이션에 대한 Gabage Collection입니다. GraalVM 19.0.0 버전에서 처음 도입되었으며, 이후 OpenJDK 11.0.2 버전부터는 실험적으로 지원되었습니다. ZGC는 매우 짧은 GC 지연 시간을 제공하며, 수백 기가바이트 크기의 힙에서도 사용할 수 있습니다. ZGC가 OpenJDK에서도 사용 가능해졌기 때문에, 더 많은 사용자가 대규모 메모리 애플리케이션을 개발할 수 있게 되었습니다.

ZGC

GraalVM에서 먼저 도입된 이러한 기능들이 OpenJDK로 이전됨으로써, 더 많은 개발자들이 이러한 기능들을 활용할 수 있게 되었습니다. 이를 통해 Java 애플리케이션의 성능을 더욱 개선할 수 있고, 대규모 애플리케이션에서도 높은 성능을 발휘할 수 있습니다.

GraalVM은 지속적으로 개발되고 있으며, 앞으로도 다양한 기능들이 추가될 것으로 예상됩니다. GraalVM에서 앞으로 OpenJDK으로 포함될 것으로 예상되는 기능들을 알아볼까요?.

  1. Substrate VM

Substrate VM은 GraalVM의 AOT(Ahead-Of-Time) 컴파일러로, Java 애플리케이션을 네이티브 바이너리 형태로 빌드할 수 있도록 지원합니다. 이를 통해 빠른 구동 속도와 낮은 메모리 사용량을 제공하며, 작은 디바이스에서의 Java 애플리케이션 실행에 적합합니다. Substrate VM은 GraalVM에서 기본적으로 지원되지만, 앞으로 OpenJDK에서도 Substrate VM이 포함될 가능성이 있습니다.

Substrate VM

2. Truffle Framework

Truffle Framework는 다양한 언어에 대한 인터프리터를 개발할 수 있는 프레임워크입니다. Truffle을 이용하면, JVM에서 실행되는 언어 이외에도 Python, Ruby, R 등 다양한 언어를 개발할 수 있습니다. Truffle은 GraalVM에서 기본적으로 지원되며, 앞으로 OpenJDK에서도 Truffle이 포함될 가능성이 있습니다.

3. FastR

FastR은 R 언어의 인터프리터로, GraalVM에서 실행됩니다. FastR은 기존의 R 언어 인터프리터보다 빠른 속도를 제공하며, R 언어와 Java 언어 간의 상호 운용성을 제공합니다. FastR은 GraalVM에서 기본적으로 지원되며, 앞으로 OpenJDK에서도 FastR이 포함될 가능성이 있습니다.

4. LVM Runtime

LLVM Runtime은 LLVM 컴파일러 프레임워크를 이용하여 작성된 네이티브 코드를 GraalVM 상에서 실행할 수 있는 런타임입니다. LLVM Runtime은 C, C++, Rust 등 다양한 언어로 작성된 라이브러리를 GraalVM 상에서 사용할 수 있게 합니다. LLVM Runtime은 GraalVM에서 실험적으로 지원되고 있으며, 앞으로 OpenJDK에서도 LLVM Runtime이 포함될 가능성이 있습니다.

5. WebAssembly

WebAssembly은 브라우저 상에서 실행되는 코드를 위한 이식 가능한 이진 형식입니다. WebAssembly을 이용하면, C, C++, Rust 등 다양한 언어로 작성된 코드를 브라우저에서 실행할 수 있습니다. GraalVM에서는 WebAssembly 지원이 실험적으로 진행 중이며, 앞으로 OpenJDK에서도 WebAssembly이 포함될 가능성이 있습니다.

이처럼 GraalVM에서 앞으로 OpenJDK으로 포함될 가능성이 있는 기능들은 다양한 분야에서 개발자들이 개발할 수 있는 환경을 더욱 향상시킬 것입니다. 특히, Substrate VM과 LLVM Runtime은 네이티브 빌드와 네이티브 라이브러리 지원을 통해 더욱 높은 성능과 상호 운용성을 제공할 것으로 기대됩니다.

또한, Truffle Framework과 FastR은 다양한 언어 지원을 통해 개발자들이 다양한 분야에서 개발을 할 수 있는 환경을 제공할 것입니다. GraalVM에서 이러한 기능들이 이미 실험적으로 지원되고 있으며, 앞으로 OpenJDK에서도 이러한 기능들이 포함될 가능성이 있기 때문에, 개발자들은 이러한 기능들을 활용하여 더욱 다양하고 성능 좋은 애플리케이션을 개발할 수 있을 것입니다.

--

--