Java 21 与 GraalVM for JDK 21 同日发布
在 Java 21 发布当天,Oracle 宣布推出 GraalVM for JDK 21。GraalVM 是一种 JDK,采用替代的即时编译器(JIT),并包含 Native Image 模块,该技术允许 Java 应用程序以原生可执行文件运行,无需 JVM。这可以显著提升 Java 应用程序在速度、内存和包大小方面的性能。
Native Image vs JIT 编译性能对比
Oracle 对比了 Native Image 与 JIT 编译的性能,JIT 是 Java 应用程序在 JVM 上运行的默认模式。JIT 在运行时将 Java 字节码编译为机器码。通过多种基准测试和指标,结果显示 Native Image 在峰值吞吐量、内存使用量、启动时间和包大小方面均优于 JIT。
示例应用:Spring Petclinic
以 Spring Petclinic(一个模拟兽医诊所的 Java Web 应用)为例,Native Image 在 Profile-Guided Optimizations (PGO) 和 G1 垃圾收集器的支持下表现更优。PGO 是一种在运行时收集应用程序行为信息并用于优化原生代码的技术。
GraalVM 新特性
GraalVM 新版本引入了新的应用级别策略,默认命令行参数为 -O2,该参数较为激进,提供高性能,编译时间快 10-15%,并针对常见的 Java 微服务工作负载进行了优化。新增了 -O3 参数,启用最大优化以获得最佳性能,并会在使用 PGO 时自动启用。
开发者体验改进
最新的 GraalVM 版本引入了多项改进以提升开发者体验:
- 新增 --parallelism 选项,允许开发者指定构建过程中使用的线程数。
- 构建输出升级,显示内存和线程限制,并可通过 --color 自定义输出颜色。
- Native Image 构建过程中的内存管理优化,默认优先使用空闲内存,若空闲内存低于 8GB 则切换至总内存的 85%,以防止机器变慢。
- 新增 native-image-inspect 工具,用于转储可执行文件和共享库的堆以进行调试。
- 错误处理改进,新增了针对缺失元数据、资源和序列化元数据的专用异常,提升程序稳定性。
- 新增类初始化策略,允许所有类在构建时使用和初始化,开发者可通过 --strict-image-heap 启用。
其他改进
- 不再需要 gu 工具,简化了开发流程。
- 新增对 JFR 事件 ThreadCPULoad 的支持。
许可证
Oracle GraalVM 采用 GraalVM 免费条款和条件(GFTC)许可证,使其先进的 JIT 和 AOT 编译技术对所有开发者开放。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。