多语言虚拟机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的版本公告提供了全部的改进和增强信息。
原文链接:
领取专属 10元无门槛券
私享最新 技术干货