GraalVM
GraalVM![]() |
개발자 | 오라클 코퍼레이션 |
---|---|
안정된 릴리스 | 22.1.0[1] / 2022년 4월 ; 전 ( ) |
저장소 | |
기입처 | 자바 |
운영 체제 | Linux, Windows 및 MacOS[2] |
플랫폼 | Java 가상 머신 |
유형 | Java 다이내믹 컴파일러 및 런타임 |
면허증. | 커뮤니티 에디션: GPLv2[3][4] Enterprise Edition:트라이얼웨어 |
웹 사이트 | www |
GraalVM은 Java에서 구현된 HotSpot/OpenJDK 기반의 Java VM 및 JDK입니다.빠른 부팅과 낮은 메모리 공간을 위해 Java 애플리케이션의 사전 컴파일과 같은 추가 프로그래밍 언어와 실행 모드를 지원합니다.첫 번째 프로덕션 지원 버전인 GraalVM 19.0은 2019년 [5]5월에 출시되었습니다.최신 버전은 GraalVM 22.1.0으로 2022년 4월에 출시되었습니다.
기본 JDK와 비교한 GraalVM의 주요 차별화 요소는 다음과 같습니다.
- Java용 JIT 컴파일러 GraalVM 컴파일러
- GraalVM 네이티브 이미지: Java 애플리케이션을 미리 컴파일할 수 있습니다.
- Truffle Language Implementation 프레임워크 및 GraalVM SDK를 통해 추가 프로그래밍 언어 런타임 구현
- LLVM 런타임 및 JavaScript 런타임
프로젝트 목표
- Java 가상 머신 기반 언어의 성능을 네이티브 [6][7]언어의 성능과 일치하도록 향상시킵니다.
- GraalVM Native Image 기술을 사용하여 JVM 기반 애플리케이션을 미리 컴파일하여 시작 시간을 단축합니다.
- Oracle Database, OpenJDK, Node.js, Android/iOS에 GraalVM을 통합하고 유사한 사용자 지정 임베딩을 지원합니다.
- 단일 프로그램에서 프로그래밍 언어의 코드를 자유 형식으로 혼합하여 "폴리글롯 응용 프로그램"[6][8]으로 청구할 수 있습니다.
- 쉽게 확장할 수 있는 "폴리글롯 프로그래밍 도구"[6][9] 세트를 포함합니다.
역사
GraalVM은 Sun Microsystems Laboraties(현 Oracle Labs)의 Maxine Virtual Machine 프로젝트에 뿌리를 두고 있습니다.목표는 Java 가상 머신을 Java 자체에서 작성하는 것으로, C++에서의 개발, 특히 수동 메모리 관리에서 벗어나 메타 서클 최적화의 이점을 얻을 수 있기를 희망했습니다.자바에서 모든 것을 쓰는 것은 너무 야심적이라는 것을 깨닫고 컴파일러에만 초점을 맞추고 핫스팟에 접속하여 가능한 한 핫스팟 런타임을 재사용하기로 결정했다.GraalVM 컴파일러는 Hotspot 클라이언트 컴파일러의 코드("C1")를 Java로 수동으로 변환하여 이전 Maxine [10]컴파일러를 대체함으로써 시작되었습니다.
Graal은 실험적인 사전 컴파일을 지원하기 위해 Java 9부터 15까지 OpenJDK와 같은 HotSpot 기반 Java VM 릴리즈에 포함되었습니다.Java 16에서는 JDK 버전과 스탠드아론 GraalVM 릴리스 모두에서 중복 [11]작업이 발생했기 때문에 제거되었습니다.Java 프로젝트에서 네이티브 실행 파일을 생성하는 유사한 기능은 독립 실행형 GraalVM 릴리스의 네이티브 이미지 도구를 통해 제공됩니다.
릴리스
GraalVM은 운영 지원 소프트웨어로, 오픈 소스 라이센스의 경우 커뮤니티 에디션으로, 얼리어답터 버전의 경우 [12]OTN 라이센스 계약 Oracle GraalVM Enterprise Edition에 동의하면 액세스할 수 있습니다.Oracle Corporation은 [13]2019년 5월 8일 Oracle GraalVM Enterprise Edition의 출시를 발표했다.GraalVM은 x86 64비트 시스템의 Linux 및 MacOS 플랫폼에서 기본 JDK를 대체할 수 있습니다.
GraalVM 22
GraalVM 22.1.0 GraalVM 22.1.0은 2022년 [14]4월에 출시되었습니다.
GraalVM 22.0.0 GraalVM 22.0.0은 2022년 1월에 출시되었습니다.
GraalVM 21
GraalVM 20
GraalVM 20.3.0
GraalVM 20.3.0은 2020년 [15]11월에 출시되었습니다.GraalVM의 첫 번째 LTS 엔터프라이즈 버전이자 2020년 최종 릴리스로 기록되었습니다.이 버전은 GraalVM LLVM 런타임에서 코드 공유를 지원하므로 공통 비트 코드 라이브러리의 AST 및 컴파일된 코드를 단일 엔진 내의 여러 컨텍스트 간에 공유할 수 있습니다.
GraalVM 20.1.0
GraalVM 20.1.0은 2020년 [16]5월에 출시되었습니다.여기에는 많은 구성요소에 대한 몇 가지 개선이 포함되어 있습니다.성능 향상 외에도 네이티브 이미지에 대한 사용 편의성 수정이 발표되었습니다.JavaScript 엔진은 기본적으로 모든 ECMAScript 2020 모드 기능을 지원합니다.JavaScript와 Python에서 사용되는 정규 표현 엔진(TRegex)은 현재 모든 표현을 지원합니다.Ruby(TruffleRuby)는 네이티브 보석과의 호환성이 향상되었습니다.
GraalVM 20.0.0
GraalVM 20.0.0은 2020년 [17]2월에 출시되었습니다.컴파일러와 지원되는 언어의 많은 세부 변경 사항 중에서 Windows 지원 기능이 향상되었고 향상된 네이티브 이미지 툴이 제공되었으며 툴 지원 기능이 향상되었습니다.
GraalVM 19
GraalVM 19.0.0
Windows에서의 지원은 현재 개발 중이며 GraalVM 19.0의 얼리어답터 기능으로 출시되었습니다.
GraalVM 19.0은 JDK 버전 8u212를 기반으로 합니다.
구성 요소들
GraalVM 컴파일러는 일반 Java 가상 머신(OpenJDK)의 컴포넌트와 함께 출하됩니다.GraalVM에는 새로운 실행 모드(GraalVM Native Image) 또는 프로그래밍 언어(LLVM 런타임, GraalVM JavaScript는 더 이상 사용되지 않는 Nashorn 엔진을 대체할 수 있는 것으로, TRegex는 정규 표현 엔진으로)를 지원하기 위한 추가 구성 요소가 포함되어 있습니다.
GraalVM 컴파일러
GraalVM 컴파일러는 최신 Java Just-In-Time 컴파일러입니다.기존 컴파일러(HotSpot의 C1/C2)를 보완하거나 대체합니다.기존 컴파일러와 달리 GraalVM 컴파일러는 Java 자체에서 모듈식, 유지보수 및 확장 가능한 방식으로 작성됩니다.
이 릴리스는 클래스 경로 예외를 제외하고 GPL 버전2로 출시됩니다.
GraalVM 네이티브 이미지
GraalVM Native Image는 클래스 [18]파일의 실행 가능한 바이너리를 생성하는 선행 컴파일 기술입니다.이 플러그인은 얼리어답터 플러그인으로 출시됩니다.즉, 실가동 가능한 상태이지만 향후 출시에는 백포트 호환성이 없는 업데이트가 포함될 수 있습니다.
이 기능은 JVM 기반 언어를 지원하지만 Truffle 프레임워크를 기반으로 개발된 동적 언어를 선택적으로 실행할 수 있습니다.실행 파일은 JVM에서 실행되지 않으며 필요한 런타임 구성 요소를 "VM 기반"의 스레드 스케줄링 또는 GC(가상 시스템의 일반 버전)로 사용합니다.네이티브 바이너리에는 애플리케이션 클래스, JDK 의존관계 및 라이브러리가 이미 포함되어 있기 때문에 시작 및 실행 시간이 크게 단축됩니다.
GraalVM Native Image는 공식적으로 Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus, Vert.x 및 Spring Boot [19]Java 프레임워크에서 지원됩니다.[20] 2016년 9월 Oracle은 Java [21][22]9용 GraalVM 컴파일러를 사용하여 OpenJDK에 사전 컴파일을 추가할 계획입니다.JEP 295: Aread-of-Time Compilation에 의해 추적된 이 제안은 Java [23]9에 포함되어 있습니다.Java [24]10용 Linux x86-64 플랫폼용으로 GraalVM을 저스트 인 타임 컴파일러로 실험적으로 사용했습니다.
JDK 릴리즈 9 ~15에서는jaotc
명령을 실행하면 네이티브 [25]이미지가 생성됩니다.실험적인 것-XX:+EnableJVMCIProduct
flag를 지정하면 Graal JIT를 [26]사용할 수 있습니다.이 기능은 독립형 GraalVM 릴리스의 [27]네이티브 이미지 컴포넌트에서 사용할 수 있습니다.
트러플 언어 구현 프레임워크
Oracle Labs는 GraalVM과 협력하여 GraalVM [28][29]위에 언어를 구현할 수 있는 "Truffle"이라는 언어 추상 구문 트리 인터프리터를 개발했습니다.GCC와 Clang만큼 [30]빠르다고 주장하는 C 통역사를 포함하여 많은 언어가 Truffle에 구현되었습니다.
Truffle 프레임워크와 그 종속 부분인 GraalVM SDK는 Universal Permitive License 버전 1.0에 따라 출시되어 저작권이나 기타 부모 권리에 구속되지 않는 프로젝트에 프레임워크 사용을 장려합니다.
인스트루먼테이션 기반 도구 지원
GraalVM 생태계의 주요 장점은 VM 런타임에 직접 내장된 언어에 구애받지 않고 완전히 동적인 계측 지원입니다.실행 이벤트는 완전히 최적화된 [31][32]코드에서 매우 낮은 오버헤드를 가진 API 클라이언트에 의해 캡처될 수 있습니다.
핵심 GraalVM 설치는 계측 및 기타 VM [9]지원을 기반으로 언어에 구애받지 않는 디버거, 프로파일러, 힙 뷰어 등을 제공합니다.GraalVM에는 Chrome Inspector 원격 디버깅 프로토콜의 [33]백엔드 구현도 포함되어 있습니다.원래 JavaScript 디버깅용으로 설계되었지만 브라우저에서 모든 GraalVM 언어를 디버깅하기 위해 사용할 수 있습니다.
언어 및 런타임 지원
GraalVM은 Java 에코시스템 및 에 기재되어 있습니다.Java, Scala, Kotlin 등 Java 바이트 코드 형식으로 컴파일되는 모든 언어로 작성된 응용 프로그램을 실행할 수 있습니다.
Truffle Language Implementation Framework를 기반으로 GraalVM에서 추가 언어를 지원할 수 있습니다.
- GraalVM JavaScript:[34] ECMAScript 2021 준거 JavaScript 런타임, Node.js 지원
- 트러플 루비:[35]Ruby on Rails 사전 지원을 통한 Ruby 언어 구현
- FastR:[36] R 언어 구현
- GraalVM Python:[37]Python 3 언어 구현
- GraalVM LLVM 런타임(SuLong):[38]LLVM 비트코드 인터프리터 구현
- Graal Wasm:[39][40] Web Assembly 구현
GraalVM 사용자는 추가 언어 지원을 구현할 수 있습니다.주요 서드파티 언어 구현으로는 grCuda,[41] SOMNS,[42] TruffleSqueak [43][44]및 [45]Yona가 있습니다.
레퍼런스
- ^ "Release Notes - 22.1.0". 26 April 2022. Retrieved 26 April 2022.
- ^ "Downloads".
- ^ "GraalVM FAQ". Retrieved 2018-04-25.
- ^ "graal/README.md". GitHub. Retrieved 2018-04-25.
- ^ "For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition". Oracle Corporation. Retrieved 2022-01-21.
- ^ a b c "Why GraalVM". Retrieved 2018-04-25.
- ^ "Graal : Un compilateur dynamique pour Java". lemondeinformatique.fr. 2012-02-13. Retrieved 2013-08-23.
- ^ "Reference Manual for Polyglot Applications". Retrieved 2018-04-25.
- ^ a b "GraalVM Debugging and Monitoring Tools". www.graalvm.org. Retrieved 2019-04-08.
GraalVM provides a set of tools for developers, integrators, and IT administrators to debug and monitor GraalVM and deployed applications.
- ^ ""Meta-Circularity is Near", GraalVM, Truffle--airhacks.fm podcast : Adam Bien's Weblog". Archived from the original on 2020-05-29.
- ^ "[JDK-8255616] Removal of experimental features AOT and Graal JIT". bugs.openjdk.java.net. Retrieved 2021-03-13.
- ^ https://www.oracle.com/technetwork/licenses/graalvm-otn-license-5486575.html
- ^ "GraalVM 19.3: Announcing GraalVM 19.3 with JDK 11 Support". Oracle Corporation. 20 November 2019. Retrieved 2019-11-25.
- ^ "GraalVM Release Notes 22.1.0". 2022-04-26. Retrieved 2022-04-26.
- ^ Šelajev, Oleg (2020-11-20). "GraalVM 20.3 is available". Medium. Retrieved 2020-12-31.
- ^ GraalVM 20.1
- ^ GraalVM 20.0: Windows 지원 향상, 네이티브 이미지 향상, 툴링 향상
- ^ "Native Images". www.graalvm.org. Archived from the original on 2018-04-20.
- ^ "GraalVM Open Source Ecosystem". Oracle Corporation. Retrieved 2019-09-11.
- ^ "Spring Native Image documentation". Spring Framework. Retrieved 2021-10-26.
- ^ "Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9". InfoQ.com. 2016-10-01. Retrieved 2016-10-06.
AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)
- ^ Vladimir Kozlov (2016-09-14). "JDK-8166089: Ahead-of-Time Compilation". Oracle Corporation. Retrieved 2016-10-06.
Compile an application's Java classes to native code prior to launching the virtual machine.
- ^ Vladimir Kozlov (2016-10-13). "JEP 295: Ahead-of-Time Compilation". Oracle Corporation. Retrieved 2016-10-13.
Compile Java classes to native code prior to launching the virtual machine.
- ^ Vladimir Kozlov (2017-10-20). "JEP 317: Experimental Java-Based JIT Compiler". Oracle Corporation. Retrieved 2018-01-21.
JEP 317: Experimental Java-Based JIT Compiler
- ^ "OpenJDK: Graal". openjdk.java.net.
- ^ "[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode". bugs.openjdk.java.net.
- ^ "GraalVM: Reference Manual: Native Image". graalvm.org.
- ^ "Truffle: A Self-Optimizing Runtime System" (PDF). Oracle Corporation. Retrieved 2013-08-23.
- ^ "Truffle served in a Holy Graal: Graal and Truffle for polyglot language interpretation on the JVM". 2017-12-05. Retrieved 2018-04-25.
- ^ "Truffle: Languages and Material". Gist.
- ^ Van De Vanter, Michael; Seaton, Chris; Haupt, Michael; Humer, Christian; Würthinger, Thomas (March 9, 2018). "Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools". The Art, Science, and Engineering of Programming. 2 (3, Article 14): 30. arXiv:1803.10201. doi:10.22152/programming-journal.org/2018/2/14. S2CID 4382172.
- ^ "Getting started with Instruments in GraalVM". www.graalvm.org. Retrieved 2019-04-08.
Truffle instruments can track very fine-grained VM-level runtime events to profile, inspect, and analyze the runtime behavior of applications running on GraalVM.
- ^ "Chrome DevTools". developers.google.com. Retrieved 2019-04-08.
Chrome DevTools is a set of web developer tools built directly into the Google Chrome browser. DevTools can help you edit pages on-the-fly and diagnose problems quickly, which ultimately helps you build better websites, faster.
- ^ GraalVM JavaScript github 저장소
- ^ TruffleRuby github 저장소
- ^ GraalVM FastR github 저장소
- ^ GraalPython Github 저장소
- ^ GraalVM LLVM 런타임 github 저장소
- ^ "GraalWasm github repository". GitHub.
{{cite web}}
: CS1 maint :url-status (링크) - ^ Prokopec, Aleksandar (2019-12-02). "Announcing GraalWasm — a WebAssembly engine in GraalVM". Medium. Retrieved 2020-01-15.
- ^ grCuda GitHub 저장소
- ^ SOMns GitHub 저장소
- ^ TruffleSqueak GitHub 저장소
- ^ Niephaus, Fabio; Felgentreff, Tim; Hirschfeld, Robert (2019). "GraalSqueak: Toward a Smalltalk-based Tooling Platform for Polyglot Programming". Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes - MPLR 2019. ACM Digital Library. pp. 14–26. doi:10.1145/3357390.3361024. ISBN 9781450369770. S2CID 204728643. Retrieved 2020-11-08.
- ^ 요나어