- GraalVM 发布日历
- 适用于 JDK 24 的 GraalVM
- 适用于 JDK 23 的 GraalVM
- 适用于 JDK 22 的 GraalVM
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 20 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- GraalVM 22.3.x
- GraalVM 22.2.x
- GraalVM 22.1.x
- GraalVM 22.0.x
- GraalVM 21.3.x
- GraalVM 21.2.x
- GraalVM 21.1.x
- GraalVM 21.0.x
- GraalVM 20.3.x
- GraalVM 20.2.x
- GraalVM 20.1.x
- GraalVM 20.0.x
- GraalVM 19.3.x
19.0.2
(2019-06-13)
这是 19.0 的一个错误修复版本,我们建议所有 19.0.x 用户升级。
Java
- 改进了调度器阶段的编译性能。
- 支持从类初始化器中检索注解(参见 1320)。
- 修复了与 FreeType 库相关的问题:1269、1270、1305。
- 修复了版本字符串报告问题(字符串中缺少
64-Bit
)。
原生镜像
- 修复了
IllegalArgumentException: Cannot create Method for class initializer
错误(参见 1320)。 - 修复了当
META-INF/native-image/native-image.properties
包含--force-fallback
时构建会无限循环的问题。 - 修复了回退镜像生成不遵循
--no-server
参数的问题。 - 修复了
native-image-agent=restrict
配置检测问题。 - 添加了
-agentlib:native-image-agent=build
配置选项。
LLVM 解释器
允许 LLVM 解释器上下文在没有 allowIO(true)
的情况下运行。
19.0.0
(2019-05-09)
Windows 早期采用者支持
适用于 Windows 的 GraalVM 早期采用者构建版本现已可用。这些版本包括启用 GraalVM 编译器的 JDK、原生镜像功能、GraalVM 的 JavaScript 引擎以及开发工具:基于 Chrome Inspector 的调试器、性能分析器等。目前,尚无 gu
实用程序或添加对其他 GraalVM 语言支持的功能。
Java
- 我们将基础 JDK 更新到 8u212。您可以在 Oracle 技术网络网站上找到 JDK 发布说明。
Native Image
原生镜像已从 GraalVM 基础发行版中提取。目前它作为早期采用者插件提供。要安装它,请运行:gu install native-image
。完成此额外步骤后,native-image
可执行文件将位于 bin
目录中,与之前版本相同。
native-image
中类的初始化方式发生了变化。现在,默认情况下,我们会在运行时初始化应用程序类。初始化策略如下:
- 所有 JDK 类都在构建时初始化。
- 我们在分析后证明应用程序静态初始化器的安全性并初始化安全的类。
- 我们提供以下标志来精细控制类初始化:
--initialize-at-build-time
和--initialize-at-run-time
。
此更改对我们所有基准测试的性能和启动影响微不足道。
进行此更改是为了改善用户体验:无需编写替代品,也无需处理不支持的类实例最终出现在镜像堆中的问题。只要为反射、代理等提供了正确的配置,它们的应用程序就应该能够正常工作而不会出现性能下降。
为了让框架作者和最终用户将启动时间保持在最低限度,我们改进了 --initialize-at-build-time
和 --initialize-at-run-time
的功能。这些标志允许为整个包或单个类指定策略。例如,如果我们有类 p.C1
、p.C2
、…、p.Cn
,我们可以使用 --initalize-at-build-time=p
急切地初始化此包。如果我们要延迟包 p
中的一个类,只需添加 --initialize-at-run-time=p.C1
。
只需在命令行上传递 --initalize-at-build-time
即可在构建时初始化整个类层次结构。
我们还引入了 -H:+PrintClassInitialization
标志,它允许您在镜像构建期间跟踪类初始化所做的工作。此标志将帮助您将构建配置为按预期工作。
如果我是库作者,我该怎么办?
- 为了让您的测试恢复正常,您可以使用
--intialize-at-build-time
,它将恢复到之前的行为。 - 然后使用
-H:+PrintClassInitialization
标志查看类何时被初始化。根据此输出来进行适当的配置。 - 通过向
native-image.properties
传递--intialize-at-build-time=<csv-of-classes-or-packages>
来配置它。 - 向您认为运行良好的下游库提交包含配置的拉取请求。这样,您的
native-image.properties
将只关注您框架中的类。 - 存在一个已知问题:Lambda 在构建时被初始化。如果您的 Lambda 继承了一个包含默认方法和静态字段的接口,这些字段将被拉入镜像。我们将在接下来的两周内提供此错误的修复。
JavaScript
- 修复了各种与编译问题相关的错误。
R
- 修复了在 Linux 平台上,长时间计算期间发送
SIGINT
时出现的致命错误。 - 修复了安装到受保护位置的问题:默认的 Renviron 文件将
R_LIBS_USER
设置为当前用户主目录内的一个目录。用户仍然需要手动创建此目录。或者,configure_fastr
脚本可以创建此目录,但仅限于当前用户。 - 实现了缺失的 C API:
S_realloc
。
Ruby
- 各种错误修复。最值得注意的是针对 OpenSSL C 扩展编译的修复。
- 重命名了
TruffleRuby
对象中的方法。
理想图可视化工具 (IGV)
- 修复了 AST 和调用树不显示的问题(问题)。