多語言虛擬機GraalVM爲使用多種語言(如Java、C語言、Python和JavaScript)開發的應用程序提供了共享運行時。最新版本19.3已發佈,支持JDK 11。之前的版本基於JDK 8。
GraalVM限制支持大量介於Java 9和Java 11之間的語言特性和平臺改進,如緊湊的字符串、變量類型推斷、Java平臺模塊系統(JPMS)和HTTP客戶端。
例如,下面的代碼片段演示了使用最新的Java 11 HTTP客戶端向比特幣網站發送一個簡單的請求:
public class BPI {
public static void main(String... args) {
var request = HttpRequest
.newBuilder()
.uri(URI.create("https://api.coindesk.com/v1/bpi/currentprice.json"))
.GET()
.build();
var response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofInputStream());
var json = Json
.createReader(response.body())
.readObject()
.getJsonObject("bpi");
…
System.out.printf("Current Bitcoin Price: $%s %s", price, indicator);
}
}
在將GraalVM的安裝路徑加入到JAVA_HOME和PATH中之後,就可以使用javac命令或Maven構建工具來編譯基於Java 11的類(如上述的Java類)。
GraalVM的本地鏡像生成器也支持Java 11,作爲早期採用者技術特性。本地鏡像是一種提前編譯的Java字節碼包,可獨立執行。本地鏡像具有啓動速度快、佔用空間小的特點。但要注意的是,本地鏡像不支持Java平臺模塊系統,在運行時不具備模塊自檢功能。native-image是一個可選包,可通過GraalVM更新程序gu來安裝。gu是一個包管理器,可用於下載和安裝不包含在GraalVM發行版中的包。
下面的代碼片段演示瞭如何安裝native-image、基於上述的類構建一個本地鏡像,並執行生成的文件:
gu install native-image
native-image -cp example.jar \
--enable-url-protocols=https \
my.example.BPI
使用Maven作爲構建工具的用戶可以使用Maven插件來生成鏡像。
另外需要注意的是,因爲G1是Java 11的默認垃圾回收器,所以在將對性能比較敏感的應用程序從JDK 8遷移到JDK 11時,需要特別小心。
除了支持JDK 11,這個GraalVM長期支持(LTS)版本也在其他多個方面做出了改進,如本地鏡像生成、GraalVM編譯器、代碼覆蓋、GraalVM VisualVM,升級NodeJS、Python和R語言運行時。GraalVM 19.3的版本公告提供了全部的改進和增強信息。
相關資源
- Announcing GraalVM 19.3 with JDK 11 Support by GraalVM Team (November 20, 2019)
- GraalVM 19.0: the Anticipated GA Release by InfoQ (July 17, 2019)
- Java Feature Spotlight: Local Variable Type Inference by Brian Goetz (November 1, 2019)
- Getting to Know Graal, the New Java JIT Compiler by Ben Evans (July 16, 2018)
原文鏈接: