19.0.2

(2019-06-13)

这是 19.0 的一个错误修复版本,我们建议所有 19.0.x 用户升级。

Java

  • 改进了调度器阶段的编译性能。
  • 支持从类初始化器中检索注解(参见 1320)。
  • 修复了与 FreeType 库相关的问题:126912701305
  • 修复了版本字符串报告问题(字符串中缺少 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

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.C1p.C2、…、p.Cn,我们可以使用 --initalize-at-build-time=p 急切地初始化此包。如果我们要延迟包 p 中的一个类,只需添加 --initialize-at-run-time=p.C1

只需在命令行上传递 --initalize-at-build-time 即可在构建时初始化整个类层次结构。

我们还引入了 -H:+PrintClassInitialization 标志,它允许您在镜像构建期间跟踪类初始化所做的工作。此标志将帮助您将构建配置为按预期工作。

如果我是库作者,我该怎么办?

  1. 为了让您的测试恢复正常,您可以使用 --intialize-at-build-time,它将恢复到之前的行为。
  2. 然后使用 -H:+PrintClassInitialization 标志查看类何时被初始化。根据此输出来进行适当的配置。
  3. 通过向 native-image.properties 传递 --intialize-at-build-time=<csv-of-classes-or-packages> 来配置它。
  4. 向您认为运行良好的下游库提交包含配置的拉取请求。这样,您的 native-image.properties 将只关注您框架中的类。
  5. 存在一个已知问题:Lambda 在构建时被初始化。如果您的 Lambda 继承了一个包含默认方法和静态字段的接口,这些字段将被拉入镜像。我们将在接下来的两周内提供此错误的修复。

JavaScript

  • 修复了各种与编译问题相关的错误。

R

  • 修复了在 Linux 平台上,长时间计算期间发送 SIGINT 时出现的致命错误。
  • 修复了安装到受保护位置的问题:默认的 Renviron 文件将 R_LIBS_USER 设置为当前用户主目录内的一个目录。用户仍然需要手动创建此目录。或者,configure_fastr 脚本可以创建此目录,但仅限于当前用户。
  • 实现了缺失的 C API:S_realloc

Ruby

  • 各种错误修复。最值得注意的是针对 OpenSSL C 扩展编译的修复。
  • 重命名了 TruffleRuby 对象中的方法。

理想图可视化工具 (IGV)

  • 修复了 AST 和调用树不显示的问题(问题)。

联系我们