GraalVM快速參考指南 - graalvm
GraalVM是一個通用專案,提供許多有趣的功能,您可以將它們用於您的應用程式,包括Java,JVM語言,JavaScript,Ruby,Python,R等。
從使用更好的即時編譯器,到構建應用程式的本機可執行檔案,再到以不同語言執行元件,您現在都可以使用GraalVM。
在此快速參考中,我們嘗試概述最常用的選項,這些選項描述了GraalVM的不同功能。
GraalVM可以透過三種主要方法來幫助Java應用程式:透過使用最新的JIT編譯器來使其更快,透過即時啟動和低記憶體消耗將它們編譯為獨立的本機可執行檔案,以及可執行其他語言的程式碼或庫。
第一部分著重於執行Java應用程式。最重要的是,要記住GraalVM發行版包含一個包含所有常用JDK工具的JDK,這意味著您可以將GraalVM用作您的JDK。例如,使用javac實用程式編譯Java原始碼:
javac MyApp.java |
當然,您也可以使用GraalVM執行Java應用程式或任何其他JVM語言。除了能夠執行Java之外,GraalVM還受益於其強大的實時(JIT)編譯器並達到了最新的峰值效能,通常比其他JDK更快地執行它們。
java -jar MyApp.jar |
使用GraalVM實時執行Java應用程式時,底層JVM是通常的Java Hotspot(tm)VM,這意味著大多數配置選項是等效的,例如,指定應用程式的類路徑的工作方式如下:
java -cp target/myapp.jar com.example.Main |
GraalVM編譯器通常在預編譯為本機共享庫模式下執行。但是其程式碼是用Java編寫的,並且可以用作JAR檔案,從而導致效能略有不同:使用堆記憶體進行編譯會以較長的預熱為代價(例如,編譯器的Java程式碼需要編譯)。以下選項配置要在哪種模式下執行(+預設情況下啟用):
-XX:+-UseJVMCINativeLibrary |
除了將編譯器作為JAR或本機庫執行之外,您還可以指定用於最佳化的配置,用economy實現更快的預熱和enterprise最佳的峰值效能(當然需要GraalVM Enterprise)。
-Dgraal.CompilerConfiguration=enterprise|community|economy |
JIT編譯器的影響可以極大地加速應用程式的執行,但是有時尚不清楚編譯器是否正常工作,程式碼是否真正到達頂層以及哪些方法可以到達編譯器。
-Dgraal.PrintCompilation=true |
除了檢視日誌外,還可以啟用更多除錯輸出,例如,列印編譯器圖以對其進行分析,以尋找更多的最佳化機會:
-Dgraal.Dump=:2 |
當然,JVM的其他功能也可以與GraalVM一起使用。例如,您可以附加一個Java代理,它將檢測程式碼,在執行時生成類以及其他Java“代理”內容。基於Java的代理和本機代理都可以工作。一個值得注意的例子是用於簡化本機映象或映像構建的輔助配置代理。
-javaagent:path/to/jar.jar -agentlib:path/to/native/agent |
使用GraalVM的第二個主要優點是其本機映像功能:提前將應用程式編譯成本機二進位制檔案。為了使用它,您需要安裝native-image元件。一種方法是為GraalVM發行版下載元件的JAR檔案,然後執行以下命令:
gu install -L native-image.jar |
然後,您可以使用已安裝的native-image實用程式準備應用程式的本機二進位制檔案:
native-image [options] MyClass |
或者,您可以使用類似於該java命令的JAR檔案語法。
native-image -jar MyApp.jar |
像任何可執行檔案一樣執行生成的二進位制檔案:
./myApp |
如果您想構建一個共享庫而不是可執行檔案,則可以透過傳遞該--shared選項來實現。您需要用@CEntryPoint註釋標記要公開的方法,但是對該主題的更詳細探索不在本文討論範圍之內。
--shared |
另一個非常有用的可能性是構建靜態連結的二進位制檔案,其中將類似的OS庫libc連結到可執行檔案中。甚至有可能選擇libc要使用的實現。glibc預設情況下使用,muslc是一個選項,您需要為此稍微準備構建環境。
--static --libc=muslc |
可執行基於Truffle的語言的基礎結構:JavaScript,Ruby,Python,R等。這將包括該語言的直譯器,Truffle框架和JIT編譯器,因此可以在執行時編譯程式碼以加快執行速度。
例如,每一個都將包括對相應語言的支援:
例如,每一個都將包括對相應語言的支援:
--language:js --language:python --language:llvm --language:ruby |
另一個引人入勝的功能是針對本機映像可執行檔案的配置檔案引導的最佳化。您可以生成一個已檢測的二進位制檔案,對其應用相關的工作負荷,記錄與JIT相似的執行程式碼的概要檔案,並使用這些概要檔案來構建生產二進位制檔案。
native-image — pgo-instrument MyApp ./myApp native-image — pgo profile.iprof MyApp |
如果您想更清楚地瞭解本機映像構建過程中發生的情況,例如,嘗試瞭解初始化類所依據的類鏈,則可以使用一些有用的選項。
透過以下方法可以將初始化路徑跟蹤到某個類:
-H:+TraceClassInitialization=package.class.Name |
本機映像構建是一個Java流程,因此您可以在程式碼中放置一個斷點並將偵錯程式附加到該斷點上,以全面瞭解正在發生的事情。
--debug-attach=[port] |
除此之外,還有很多其他有用的選項可用於配置本機映像構建和執行時行為,我們將在以後進行探討,但是您可以使用專家幫助選項來了解可用的內容:
--expert-options-all |
GraalVM給您的第三個主要優點是多語言執行時,能夠執行多種語言,並且包括由GraalVM的JavaScript引擎提供支援的Node.js平臺。因此,如果您有Node應用程式,則可以透過呼叫node命令來執行。
node myApp.js |
最重要的是,您可以使用多種語言啟動器來以受支援的語言執行程式:
js myApp.js graalpython myApp.py ruby myApp.rb R myApp.r lli myApp |
像node這樣的啟動程式預設情況下在純模式下執行,在該模式下,直譯器被編譯為本地影像二進位制檔案。因此,要啟用與JVM的互操作性以使用Java類,請使用--jvmoption和for其他語言--polyglot:
--polyglot --jvm |
語言引擎具有許多功能來限制資源量,例如語言上下文可以執行的時間(以毫秒為單位):
--sandbox.MaxCPUTime=Nms |
最後但並非最不重要的一點是,GraalVM語言支援開箱即用的通用開發人員工具。這是整個GraalVM生態系統中最激動人心的部分之一-實施語言直譯器,以修復語言的語義,並獲得功能強大的虛擬機器,精選的GC演算法,偵錯程式,分析器,記憶體分析器和其他工具。
指定以下選項以分別啟用基於Chrome DevTools偵錯程式的偵錯程式,取樣分析器,跟蹤分析器和記憶體分析器:
--inspect --cpusampler --cputracer --memsampler |
下載本指南圖
相關文章
- java~graalVM虛擬機器JavaLVM虛擬機
- 前端參考指南前端
- GraalVM中的多層編譯優點LVM編譯
- 歷數GraalVM的十大用途LVM
- 如何使用JavaFX和GraalVM建立移動App?JavaLVMAPP
- Solon 1.5.67 釋出,增加 GraalVm Native 支援LVM
- GraalVM - Java8 Linux AMD64LVMJavaLinux
- [ CSS ] animation 快速參考CSS
- GraalVM 21.0提供執行Java程式碼的第三種方式:Espresso通過Truffle框架執行Java程式碼 - graalvmLVMJavaEspresso框架
- GraalVM原生本機映象提示和技巧 -James WardLVM
- 初步探索GraalVM--雲原生時代JVM黑科技LVMJVM
- 過兩年 JVM 可能就要被 GraalVM 替代了JVMLVM
- 全棧虛擬機器GraalVM初體驗全棧虛擬機LVM
- Elasticsearch 參考指南(介紹)Elasticsearch
- 將Spring Boot應用變成GraalVM本機映象快速執行 - codecentricSpring BootLVM
- Spring Boot 參考指南(Hazelcast)Spring BootAST
- bzip2快速參考(轉)
- Windows下使用Graalvm將Javafx應用編譯成exeWindowsLVMJava編譯
- Solon v2.2.1 釋出。向 Graalvm Native 友好靠近LVM
- Spring Boot 參考指南(目錄)Spring Boot
- Spring Boot 參考指南(Quartz Scheduler)Spring Bootquartz
- Java同步問題面試參考指南Java面試
- 在GraalVM中部署執行Spring Boot應用 - Indrek OtsLVMSpring Boot
- GraalVM 21.3支援Java 17、Native Image 效能更新等等LVMJava
- 團隊拓撲快速參考圖
- flex佈局屬性快速參考Flex
- 8086彙編指令快速參考
- Objective-C 語法快速參考Object
- HP-UX基本指令快速參考UX
- JavaScript-快速語法參考-全-JavaScript
- ABAP 7.40 快速參考-內聯宣告
- Oracle釋出多語種虛擬機器平臺GraalVM 1.0Oracle虛擬機LVM
- Android程式碼規範參考指南Android
- 使用Spring Boot和GraalVM在Knative上構建微服務 - piotrSpring BootLVM微服務
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot 參考指南(訊息傳遞)Spring Boot
- Spring Boot 參考指南(構建系統)Spring Boot
- BOOST庫 學習參考完全開發指南