『壹』 通過 GraalVM 將 Java 程序編譯成本地機器碼!
2018年4月,Oracle Labs發布了一項革新技術——Graal VM,這是基於HotSpot虛擬機的增強版本,旨在成為"任何語言"的全棧運行平台。盡管網路上對該技術的資料相對有限,主要依賴官方文檔來理解。本文將簡要概述Graal VM的概念和關鍵特性。
首先,Graal VM被官方稱為"Universal VM",它能無縫支持多種編程語言,包括但不限於:Java、JavaScript、Python和R,甚至能混合使用它們的介面和對象。重要的是,它支持使用已有的本地庫文件,極大地提高了跨語言協作的效率。
其中最顯著的優點是AHEAD-OF-TIME COMPILEMENT,即Substrate VM技術。0.20版本的Graal VM引入了Substrate VM,它是一個極簡的運行時環境,擁有獨立的異常處理和內存管理等功能。通過Substrate VM的本地鏡像構造器(Native Image Generator),用戶可以構建出針對特定機器的可執行文件,從而極大提升程序啟動速度,內存需求也顯著降低。
然而,Graal VM的使用並非沒有挑戰。Java在微服務場景下,由於其設計初衷是"一次編寫,到處運行",這在追求快速啟動和低內存佔用的微服務環境中顯得不那麼適用。Graal VM通過提前編譯來改善這些問題,官方數據顯示,使用GraalVM後的啟動時間能提升50倍,內存需求降低50%。
盡管如此,Graal VM在改變Java的一些固有特性上面臨困難。它的工作原理是將源代碼或中間代碼轉換成Graal VM能理解的中間表示(IR),並通過Truffle工具集構建語言解釋器,如Sulong,支持C和C++等語言。
要安裝Graal VM,比如在macOS上,首先要下載適用於OpenJDK 11的GraalVM社區版,然後添加至PATH和JAVA_HOME環境變數。此外,還可根據需要安裝額外的語言支持,如Python和R。通過一個Spring Boot應用的示例,我們可以看到如何利用GraalVM的Native Image功能,將Java程序編譯為本地可執行文件,從而實現顯著的性能提升。
總的來說,Graal VM為Java程序帶來了革命性的變化,尤其在微服務和性能優化方面,但同時也需要開發者理解和適應其特有的限制。對於編程愛好者和開發者來說,這是一個值得探索和學習的新領域。