GraalVM

官网:www.graalvm.org

什么是GraalVM

  • GraalVM 入门 – 高性能的多语言运行时。 它旨在加速用Java和其他JVM语言编写的应用程序的执行,同时还提供JavaScript,Ruby,Python和许多其他流行语言的运行时。 GraalVM的多语言功能使您可以在一个应用程序中混合多种编程语言,同时消除任何外语调用成本。(机译)
  • 不使用以往的JIT,采用的是AOT编译。
  • GraalVM 能够通过一种新的及时编译技术在 OpenJDK 的上下文中运行,对于已有的java程序,GraalVM 使它们运行得更快,通过脚本语言提供扩展性功能以及创建提前编译的本地镜像。

安装方式

  1. 在官网中找到对应的需求(我选择的是Community)
    下载地址
  2. graalvm支持javafx码_Java

  3. 根据需求选择 Java11 或 Java8
  4. graalvm支持javafx码_官网_02

  5. 点击下载压缩包
  6. 下载完后解压到对应的路径
    这里我选择与原JDK放在一起,目的是到时候切换会原来的也方便。就是懒,解压后也快1G了,注意C盘内存哈
  7. graalvm支持javafx码_java_03

  8. 配置环境变量
    我尝试了直接配置环境变量,修改JAVA_HOME的变量值,发现转不过来,也不能弄新的GRAALVM_HOME变量值,所以还是乖乖的用官网的方式配置了
  • 利用 CMD 配置官网提供的方式
    官网配置方式
    分别执行(根据我的文件位置为例)
    setx /M PATH "C:\Program Files\Java\graalvm-ce-java11-20.3.0\bin;%PATH%"setx /M JAVA_HOME "C:\Program Files\Java\graalvm-ce-java11-20.3.0" 注意:以管理员方式打开 cmd

    然后重启一下 cmd 输入 java -version就能看到原本的已经改变

这样子也就说明了环境已经配置好了。

测试案例

想来想去还是使用大家最了解的HelloWord为例吧

  1. 首先准备一个一份代码
public class GraalVMTest {
	public static void main(String[] args) {
    	System.out.println("Hello GraalVM!");
    	System.out.println(args[0]);
    }
}
  1. 运行
  2. graalvm支持javafx码_官网_04

  3. (前提)编译成本地镜像前,需要给这 GraalVM 安装 native-image 组件,还需要安装一个 visual studio 。
    没安装前进行转换文件:
  4. graalvm支持javafx码_官网_05

  5. 执行 gu 命令安装组件(因为从GitHub中下载,所以会比较慢,有可能还会失败,多试几次就行)
    gu install native-image注意:还是需要以管理员的身份打开cmd安装,我已经安装过了才是这样显示的。
  6. graalvm支持javafx码_虚拟机_06

  7. 另外还需安装 visual studio :
  8. graalvm支持javafx码_官网_07

  9. 需要它的原因是 GraalVM 把 class 文件编译成 exe 文件时需要 MSVC 环境的。
  10. 开始编译
    (还是会遇到一个小问题,如下)
  11. graalvm支持javafx码_官网_08

  12. 查了下资料,得知是环境变量没有cl命令,而cl 命令是 Visual Studio 的。
    在安装的时候并没有自动添加到我们系统的环境变量里,这时我们需要去执行一个脚本, 这个脚本在 Visual Studio 的安装目录里,如下图:
  13. graalvm支持javafx码_java_09

  14. 需在 CMD 命令行内执行,执行后会将相关环境变量添加到当前的 CMD 环境。因为是临时变量,所以只对当前的 CMD 有效。
    根据安装路径取:
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"执行:
  15. graalvm支持javafx码_官网_10

  16. 再次编译:
  17. graalvm支持javafx码_虚拟机_11

  18. 可算是成功了,可以看到 class 已被编译成了 exe 文件了
  19. graalvm支持javafx码_Java_12

  20. 运行看试试
  21. graalvm支持javafx码_官网_13

  22. 执行成功了!不过注意到的是,文件明显变大了许多,这里主要是它集成了 Java 所需要的运行环境。

总结

目前,这里就主要是简单的演示如何安装 GraalVM 以及 了解下 native-image 如何将 class 文件编译成可执行的 image 文件,当然不仅仅可以编译 class 文件,还可以编译 jar 包。
可以通过 native-image --help 查看到更多详细的操作,后续有时间再对 GraalVM 继续深入研究哈,谢谢大家。


一起靓,才是真靓仔