GraalVM[1] 是一種高效能的虛擬機器,它可以顯著的提高程式的效能和執行效率,非常適合微服務。最近比較火的 Java 框架 Quarkus[2] 預設支援 GraalVM
下圖為 Quarkus 和傳統框架(SpringBoot) 等對比圖,更快的啟動資料、更小的記憶體消耗、更短的服務響應。
Spring Boot 2.4 開始逐步提供對 GraalVM 的支援,旨在提升上文所述的 啟動、記憶體、響應的使用體驗。
安裝 GraalVM目前官方社群版本最新為 20.3.0 ,是基於 OpenJDK 8u272 and 11.0.9 定製的,可以理解為 OpenJDK 的衍生版本 。官方推薦的是 SDKMAN[3] 用於快速安裝和切換不同版本 JDK 的工具 ,類似於 nodejs 的 nvm[4]。使用類似命令即可完成指定版本安裝和指定預設版本
sdk install java 11.0.9.hs-adptsdk default java 11.0.9.hs-adpt
不過安裝過程中需要從國外下載相關資源 ,筆者在嘗試後使用體驗並不是很好,所以建議大家下載指定版本 GraalVM 安裝即可(和 JDK 安裝方式一樣)。
安裝成功檢視版本⋊> ~ java -version 11:30:34openjdk version "11.0.9" 2020-10-20OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
安裝 native-imagenative-image 是由 Oracle Labs 開發的一種 AOT 編譯器,應用所需的 class 依賴項及 runtime 庫打包編譯生成一個單獨可執行檔案。具有高效的 startup 及較小的執行時記憶體開銷的優勢。
但 GraalVM 並未內建只是提供 gu 安裝工具,需要我們單獨安裝。
啟動應用 這裡執行的編譯後的可執行檔案而不是 jarcd target./com.example.demo.demoapplication
啟動時間 0.215 seconds
2020-12-18 12:30:40.625 INFO 94578 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 0.215 seconds (JVM running for 0.267)
看一下記憶體佔用 24.8203MBps aux | grep com.example.demo.demoapplication | grep -v grep | awk '{print $11 "\t" $6/1024"MB" }'./com.example.demo.demoapplication 24.8203MB
資料對比
是否引入 GraalVM記憶體佔用啟動時間否480.965MB1135 ms是24.8203MB215 ms
參考資料[1]GraalVM: https://www.graalvm.org
[2]Quarkus: https://quarkus.io
[3]SDKMAN: https://sdkman.io/install
[4]nvm: https://github.com/creationix/nvm
[5]Gitee Gist: https://gitee.com/gi2/codes/famcqz6n21iylpg3us7j036
作者 | 冷冷
最新評論