什么是GraalVM?
高性能多语言VM
安装GraalVM
从OTN下载GraalVM
Windows GraalVM早期采用者
Windows上正在开发对GraalVM的支持。
注意:下载前,您需要先接受页面顶部的许可证:
下载基于JDK8的GraalVM,Windows预览版(19.0.1)(cksum --3226557420)
将下载的文件解压缩到任何目录
1 | Expand-Archive "C:\<DOWNLOADED FOLDER>\graalvm-ee-windows-amd64-19.0.1.zip" "C:\Program Files\Java" |
安装检查
1 2 3 4 | PS C:> & 'C:\Program Files\Java\graalvm-ee-19.0.1\bin\java.exe' -version java.exe : java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b31) Java HotSpot(TM) GraalVM EE 19.0.1 (build 25.212-b31-jvmci-19-b01, mixed mode) |
Case.2性能检查和比较
GraalSample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class GraalSample { static final int ITERATIONS = Math.max(Integer.getInteger("iterations", 1), 1); public static void main(String[] args) { String sentence = String.join(" ", args); for (int iter = 0; iter < ITERATIONS; iter++) { if (ITERATIONS != 1) System.out.println("-- iteration " + (iter + 1) + " --"); long total = 0, start = System.currentTimeMillis(), last = start; for (int i = 1; i < 10000000; i++) { total += sentence.chars().filter(Character::isUpperCase).count(); if (i % 1000000 == 0) { long now = System.currentTimeMillis(); System.out.printf("%d (%d ms)%n", i / 1000000, now - last); last = now; } } System.out.printf("total: %d (%d ms)%n", total, System.currentTimeMillis() - start); } } } |
通过JDK1.8编译GraalSample.java
1 | PS C:> & 'C:\Program Files\Java\jdk1.8.0\bin\javac.exe' -source 1.8 -d C:\Temp GraalSample.java |
运行JDK 1.8
1 2 3 4 5 6 7 8 9 10 11 12 13 | PS C:\Temp> Measure-Command { & 'C:\Program Files\Java\jdk1.8.0\bin\java.exe' GraalSample } TotalMilliseconds : 1272.6506 TotalMilliseconds : 1157.0957 TotalMilliseconds : 1155.1402 TotalMilliseconds : 1165.2418 TotalMilliseconds : 1176.3292 PS C:\Temp> Measure-Command { & 'C:\Program Files\Java\jdk1.8.0\bin\java.exe' GraalSample In 2019 I would like to run ALL languages in one VM.} TotalMilliseconds : 3806.2965 TotalMilliseconds : 3795.3136 TotalMilliseconds : 3800.0122 TotalMilliseconds : 3791.7407 TotalMilliseconds : 3783.8776 |
运行GraalVM Java(非本机)
1 2 3 4 5 6 7 8 9 10 11 12 13 | PS C:\Temp> Measure-Command { & 'C:\Program Files\Java\graalvm-ee-19.0.1\bin\java.exe' GraalSample } TotalMilliseconds : 2400.0316 TotalMilliseconds : 2394.7220 TotalMilliseconds : 2413.2863 TotalMilliseconds : 2372.2009 TotalMilliseconds : 2870.4932 PS C:\Temp> Measure-Command { & 'C:\Program Files\Java\graalvm-ee-19.0.1\bin\java.exe' GraalSample In 2019 I would like to run ALL languages in one VM. } TotalMilliseconds : 3579.2619 TotalMilliseconds : 3628.8374 TotalMilliseconds : 3516.2905 TotalMilliseconds : 3453.3161 TotalMilliseconds : 3655.8266 |
结论结论
GraalVM最初需要几次开销,但是随着迭代次数的增加,GraalVM比JDK1.8更加稳定和更快。
看来GraalVM不适合像简单的cli java程序那样的单次使用。