关于GraalVM的说明
GraalVM介绍
GraalVM 是由 Oracle Labs 开发的新一代高性能运行时,它不仅能显著提升 Java 应用在 JVM 上的执行效率,更能通过其革命性的原生镜像(Native Image)技术,将 Java 应用编译成独立的、平台相关的可执行文件。这使得 Java 应用拥有了毫秒级启动和极低内存占用的能力,完美契合云原生、Serverless 和微服务等现代应用场景。通俗的说就是可以把class文件直接编译成可执行文件,不依赖JDK执行,运行速度快,内存占用低。
关于国产平台及中间件是否支GraalVM的说明
1. 从授权方GraalVM分为社区版和商业版
| 功能项 | GraalVM CE 社区版 | GraalVM EE 企业商业版(含新版 Oracle GraalVM) |
|---|---|---|
| 开源协议 | GPLv2 with Classpath Exception,完整开源 | 闭源专有许可,不可二次分发;新版商用免费但不开源 |
| 使用成本 | 个人 / 企业开发、生产永久免费 | 旧版需 Java SE 订阅付费;新版 Oracle GraalVM 生产免费,无官方售后 |
| 官方技术支持 | 无 7×24 工单 SLA,仅 GitHub 社区 | 付费订阅提供官方故障排障、安全补丁、专项调优支持 |
| 自定义移植 | 源码公开,可自主移植龙芯 LoongArch/RISC-V | 闭源,无源码,仅官方 x86/AArch64 预编译包 |
2. 关于支持平台
官方仅提供x86/AArch64平台的windows、linux版本,龙芯、申威等平台版本不提供。
3. 按运行方式
(1) GraalVM 运行时 (GraalVM Runtime):这是一个功能完整的 JDK 发行版,可以像 OpenJDK 或 Oracle JDK 一样直接运行 .jar 文件。它内置了一个名为 Graal Compiler 的高性能 JIT 编译器,可以替换掉 HotSpot 的 C2 编译器,为传统 JVM 应用提供潜在的性能提升。
(2) 原生镜像 (Native Image):这是 GraalVM 最具颠覆性的特性。它是一个 AOT (Ahead-of-Time) 工具。它能在构建时对您的 Java 应用进行静态分析,将应用代码、所有依赖库以及 JDK 运行时中实际用到的部分,全部链接并编译成一个独立的二进制可执行文件(如 Linux 下的 my-app,Windows 下的 my-app.exe)。
优势:启动速度极快(毫秒级)、内存占用极低、无需安装 JVM 即可运行。
限制:由于是静态分析,Java 中的动态特性(如反射、动态代理、JNI)需要显式配置才能被识别。
通俗的说:如果GraalVM当普通JDK使用,则传统的Java类程序均可以运行。若是想通过Native Image将Java程序编译成二进制可执行文件,举例:
(1) 下载安装GraalVM
(2) 创建简单的Java程序
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, GraalVM Native Image!"); } }(3) 通过javac编译为class文件。
(4) 通过native-image命令来构建二进制文件
#native-image [全局选项] [目标选项(-H:xxx、-R:xxx)] [类路径] 主类名 [-o 输出文件名] native-image HelloWorld构建成功后,您会在当前目录下看到一helloworld或helloworld.exe的可执行文件,该文件可以脱离JDK来运行。
注意:以上只是一个简单举例,当应用使用了 Spring Boot、Hibernate 等框架时,它们大量依赖反射。此时直接构建 Native Image 会失败。解决方案是使用 GraalVM 提供的 Tracing Agent 来自动生成所需的反射配置文件。后期运行过程中的调试也变的麻烦。
所以要考虑采用GraalVM要从这几方面来分析:
1. GraalVM的商业授权。
2. GraalVM支持的平台,先咨询麒麟、统信操作系统等是否支持GraalVM。
3. GraalVM的使用方式,一是当传统的JDK来使用,TongWeb支持;二是通过Native Image生成二进制文件,TongWeb企业版目前不能采用这种方式,绝大部分应用也很难一次性通过Native Image编译成功,后期运维、分析问题也是需要考虑的。
