Oracle GraalVM은 대체 JIT(Just-In-Time) 컴파일러를 사용하여 Java 및 JVM 기반 애플리케이션의 성능을 가속화할 수 있는 고성능 JDK입니다. 이 솔루션은 애플리케이션 대기 시간을 줄이고 가비지 수집 시간을 단축하여 최대 처리량을 개선하며 연중무휴 Oracle 지원을 제공합니다.
또한 Java 바이트코드 AOT(Ahead Of Time)를 컴파일하고 거의 즉시 시작되며 메모리 리소스를 거의 사용하지 않는 일부 애플리케이션에 대해 기본 실행 파일을 생성하는 네이티브 이미지 유틸리티가 있습니다.
GraalVM은 2011년에 여러 프로그래밍 언어를 고성능으로 실행할 수 있는 런타임 플랫폼을 만들기 위한 Oracle Labs의 연구 프로젝트로 시작되었습니다. GraalVM 프로젝트의 핵심은 고급 최적화 GraalVM 컴파일러로, JVM(Java Virtual Machine)을 위한 JIT(Just-In-Time) 컴파일러로 사용되거나 GraalVM 네이티브 이미지 기능으로 Java 바이트코드 Ahead Of Time을 네이티브 기계어 코드에 컴파일하는 데 사용됩니다. GraalVM의 Truffle 언어 구현 프레임워크는 GraalVM 컴파일러와 함께 작동하여 JVM에서 JavaScript, Python, Ruby 및 기타 지원 언어를 뛰어난 성능으로 실행합니다.
JIT 모드 GraalVM 사용시 JVM은 GraalVM JIT 컴파일러를 사용하여 애플리케이션이 실행 중인 동안 Java 바이트코드로부터 플랫폼별 기계어 코드를 작성합니다. 컴파일은 자주 실행되는 코드에 추가 최적화를 적용하여 프로그램 실행 중에 점진적으로 수행됩니다. 이러한 접근 방식은 적극적인 인라인 처리, 부분 이스케이프 분석 및 기타 고급 최적화 덕분에 핫스폿 코드를 매우 빠르게 실행되도록 보장합니다. 일부 최적화는 가비지 수집의 로드를 낮춰주는 개체 할당을 줄입니다. 그러면 장기 실행 애플리케이션의 최대 성능이 향상됩니다.
또한 GraalVM 네이티브 이미지 유틸리티는 Java 바이트코드를 컴파일하여 네이티브 기계어 실행 파일 Ahead Of Time(즉, 구축 시)을 생성할 수 있습니다. 이러한 실행 파일은 거의 즉시 시작되며 JVM에서 실행되는 동일한 Java 애플리케이션에서 사용하는 메모리의 일부만 사용합니다. 네이티브 실행 파일은 애플리케이션에 필요한 클래스, 메서드 및 종속 라이브러리만 포함하므로 컴팩트합니다.
또한 GraalVM은 Truffle 언어 구현 프레임워크를 통해 다중 언어 상호 운용성을 지원합니다. Truffle을 사용하면 지원 언어로 작성된 프로그램에서 다중 언어 라이브러리를 사용할 수 있습니다. 예를 들어 JavaScript 프로그램은 Ruby 메서드를 호출하고 복사본을 만들지 않은 채 값을 공유할 수 있습니다. JVM에서 실행되는 Truffle은 GraalVM 컴파일러와 협력하여 Java와 마찬가지로 최적의 성능을 위해 지원 언어를 네이티브 기계어 코드로 컴파일합니다.
GraalVM 컴파일러에 대해 자세히 알아보기, GraalVM for Dummies eBook 읽기
GraalVM의 컴파일러에는 성능 및 리소스 사용을 크게 개선하는 추가 최적화 알고리즘이 많이 포함되어 있습니다. GraalVM의 네이티브 이미지 기능은 G1 가비지 컬렉터, 압축 포인터, 컴파일러가 보다 효율적인 코드를 생성하는 데 도움을 주는 프로파일 기반 최적화를 비롯한 다양한 고급 기능을 지원합니다.
GraalVM은 Java SE 제품군에 포함되어 있으며 추가 비용 없이 이용 가능합니다. 보다 예측 가능한 성능과 안정성을 위해 보안 수정과 중요 경로 업데이트에 대한 액세스를 비롯하여 Oracle의 연중무휴 지원이 포함됩니다. Java의 클라우드 마이그레이션을 위해 GraalVM은 Oracle Cloud Infrastructure(OCI)에서 무료로 사용 가능합니다.
개발자는 GraalVM이 제공하는 클라우드 또는 하이브리드 환경을 위한 보다 나은 격리 기능 및 민첩성을 바탕으로 더욱 효율적인 코드를 개발할 수 있습니다. 오늘날 점점 더 많은 기업이 GraalVM을 사용하는 몇 가지 이유는 다음과 같습니다.
GraalVM에 적용된 혁신 기술들은 Java 코드가 고객의 니즈에 신속하게 대응할 수 있는 한층 빨라진 성능을 바탕으로 오늘날의 컴퓨팅 수요에 대응할 수 있도록 해 줍니다. 고급 최적화 프로그램은 최대 처리량을 향상시킵니다. 또한 개체 할당을 최소화하여 메모리 사용을 최적화함으로써 가비지 수집을 수행하는 데 소요되는 시간을 단축합니다. JIT 모드에서 실행되는 GraalVM은 성능을 최대 50%까지 향상시킬 수 있습니다. 그러면 메모리가 더 빨리 비워지므로 동일한 인프라에서 다른 워크로드를 실행하고 IT 비용을 절감할 수 있습니다.
클라우드 네이티브 애플리케이션 구축GraalVM의 네이티브 이미지 유틸리티는 바이트코드 Java 애플리케이션을 기계어(바이너리)로 사전에 컴파일합니다. 네이티브 실행 파일은 JVM에서 실행되는 것보다 거의 100배 더 빠르게 시작되며 최대 5배나 적은 메모리를 사용합니다.
조직이 워크로드를 클라우드로 전환하고 시스템 리소스 사용 비용을 시간당으로 지불함에 따라 GraalVM은 운영 비용 절감 효과를 실현할 수 있도록 지원합니다. 이러한 결과로 인해 GraalVM에서 생성한 네이티브 실행 파일은 Helidon, Micronaut, Quarkus, Spring Boot와 같은 주요 마이크로서비스 프레임워크에서 지원되는 영역인 마이크로서비스 배포에 적합합니다.
다중 언어 프로그램 개발 및 생산성 향상성능이 뛰어난 JVM에서 Java와 JavaScript와 같은 기타 언어를 실행할 수 있습니다. Oracle NetSuite의 SuiteScript는 최종 사용자가 NetSuite에서 실행되는 애플리케이션을 사용자 지정할 수 있는 확장 언어입니다. Oracle GraalVM은 NetSuite에 Truffle 기반 JavaScript 런타임을 내장하여 JavaScript의 기계어 코드 컴파일을 지원합니다. 컴파일된 JavaScript는 JVM에서 실행되는 SuiteScript 대비 4배 더 빠르게 실행됩니다.
GraalVM에는 Java 애플리케이션 성능 가속화를 위해 프로그램에서 JIT를 실행하는 동안 기계어 코드를 작성하는 고급 최적화 컴파일러가 포함되어 있습니다. 사전 컴파일은 네이티브 이미지의 보다 빠른 시작 및 적은 메모리 사용을 가능케 하므로 클라우드 네이티브 배포에 적합한 방식입니다. 다중 언어 프로그램을 지원하여 개발자가 작성된 언어에 관계없이 비즈니스 문제를 해결하는 데 필요한 최적의 라이브러리를 사용할 수 있도록 하여 생산성을 높입니다.