GraalVM 19.3 發布了。
GraalVM 是一個高性能跨語言虛擬機,用于運行 JavaScript、Python 3、Ruby、R、基于 JVM 的語言,如 Java、Scala、Kotlin 和基于 LLVM 的語言,如 C 和 C++。
GraalVM 消除了編程語言之間的隔離,并支持共享運行時的互操作性。它可以獨立運行,也可以在 OpenJDK、Node、Oracle 或者 MySQL 上運行。
GraalVM 19.3 是從項目主線構建的第一個計劃長期支持(LTS)版本,也是一個主要功能版本,建議所有用戶升級。LTS 狀態可以確保穩定性、安全性和性能修復程序將從當前分支向后移植,直到下一個 LTS 版本出現為止。
此版本基于 JDK 11,同時也是第一個支持 JDK 11 的 GraalVM 版本,考慮到 JDK 8 和 JDK 11 之間比較大的區別,這其實代表了一個重要的里程碑。
特別是 JDK 9 中引入的 Java 平臺模塊系統(JPMS,Java Platform Module System)意味著 GraalVM 現在使用模塊封裝來隔離代碼以隔離諸如 JVMCI、GraalVM 編譯器和應用程序代碼中的 Truffle API。
此外,這也意味著 JDK 11 上的 GraalVM 包含自 JDK 8 以來的所有 JDK 更改。
關于 JDK 11,此次發布還提供了基于 JDK 11 的支持 ARM64 架構的 GraalVM 社區版的預覽,它包括對所有 JVM 語言的支持,其它語言支持將在不久后提供。
該發行版包括現成的GraalVM 本地鏡像,可立即構建啟動應用程序,這些應用程序在 ARM64 環境中消耗的內存更少,不過目前存在一些限制,比如 npm 和 node 不支持 runtime 代碼安裝。
GraalVM 19.3 切換為使用 JDK 本地代碼,而不是手動替換。GraalVM 本地鏡像切換到 Java 本地接口(JNI)平臺使它有可能提供對 JDK 11 的支持以及對 Windows OS 的擴展支持。
這對啟動時間或內存占用量沒有影響,并且消除了將 JDK 庫(例如 libsunec.so)與使用 Java 加密服務的本地鏡像一起交付的需要。GraalVM 現在附帶了 JDK 庫的可靜態鏈接版本。
同時,通過本地鏡像 Maven 插件支持將 GraalVM 本地鏡像與 Maven 一起使用,這意味著用戶可以使用 mvn package 命令直接使用 Maven 構建項目及其本地鏡像。
從 GraalVM 19.3 開始,用于 GraalVM 本地鏡像相關工件(包括插件)的 Maven
- <plugin>
- <groupId>org.graalvm.nativeimage</groupId>
- <artifactId>native-image-maven-plugin</artifactId>
- <version>19.3.0</version>
- <executions>
- <execution>
- <goals>
- <goal>native-image</goal>
- </goals>
- <phase>package</phase>
- </execution>
- </executions>
- <configuration>
- <skip>false</skip>
- <buildArgs>
- --no-fallback
- </buildArgs>
- </configuration>
- </plugin>
GraalVM 編譯器方面的改進包括:
改進了 System.arraycopy,以消除復制到 Object[] 時的存儲檢查。這項改進解決了某些 Eclipse Collections 基準測試的速度下降(相對于 C2)的問題。
通過更優化的內聯修復了在 Scala 中創建列表值時的性能下降。
修復了可能阻止包含舊版 Javac 版本產生的 JSR 字節碼的方法被編譯的問題。
此外關于各個語言的支持與工具支持的變化,詳情查看更新說明:
https://www.graalvm.org/docs/release-notes/19_3