19.2.1

(2019-10-15)

这是一个适用于 GraalVM 企业版和社区版的关键补丁更新 (CPU),遵循 Oracle 的常规 CPU 发布周期。此更新旨在解决在2019 年 10 月 Oracle 关键补丁更新咨询中公布的安全漏洞。19.2.1 版本是一个完整分发版,建议从较旧的 GraalVM 版本升级到此版本。

Oracle GraalVM Enterprise Edition 19.2.1 包含作为该 CPU 一部分发布并在 Java SE 8 发行说明中提及的所有 Java 安全修复程序。它还包括以下内容:

  • 将 GraalVM 企业版的基础 Java 更新到 8u231 Oracle JDK 版本
  • 将 GraalVM 社区版的基础 Java 更新到 8u232 OpenJDK 版本
  • 将 Node.js 更新到 10.16.3

以下是此版本中包含的关键修复:

  • 修复了一个问题,该问题阻止了创建包含 GraalVM JavaScript 引擎的原生镜像,此问题在与具有非平凡的 lengthcharAt 方法实现的 java.lang.CharSequence 实现结合使用时出现(参见#1625)。
  • 修复了一个可能允许异常传播到本应处理它的 catch 子句之外的问题。

Oracle 云基础设施客户可以通过简单地使用 yum 安装 GraalVM 企业版环境,从而在其云实例中使用它。更多详细信息,请参见OCI 上的 GraalVM。 

注意:我们目前不建议 macOS 用户升级到 Catalina——macOS 桌面操作系统的下一个主要版本。我们目前无法保证与 GraalVM 19.2.1 或更早版本的完全兼容性。

19.2.0.1

(2019-09-13)

我们为 GraalVM 准备了一个高严重性更新,以解决以下问题:

  • 修复了一个关键的编译器错误,该错误导致 String.indexOf不支持 TZCNT 指令的旧机器上执行不正确。该问题会导致字符串操作不正确,通常表现为字符串值被截断。
  • 修复了一个错误,该错误导致 Native Image 的 System.arraycopy 实现中的边界检查在处理大索引时溢出,这通常会导致进程终止。
  • 修复了 System.arraycopy 在数组被“虚拟化”(即,可以在寄存器和栈槽中而不是在堆上)情况下的边界检查。
  • 在 Native Image 中移除了 SIOCGSTAMP 符号的声明,该符号在其他情况下未被使用。这使得 Native Image 可以在任何使用 5.2.x 内核的 Linux 发行版上使用,例如最新版本的 Fedora、Ubuntu(LTS 版本用户除外)、Arch、openSUSE (tumbleweed)。

19.2.0

(2019-08-20)

这是一个 GraalVM 功能版本,我们建议从 19.1.x 或更早的版本升级到此版本。

Native Image

我们简化了为 GraalVM 企业版原生镜像收集配置文件引导优化 (PGO) 数据的过程。PGO 允许通过在镜像生成过程中分析收集到的配置文件来优化原生镜像的性能。从 19.2.0 开始,您可以在即时 (JIT) 编译模式下运行应用程序时为 PGO 收集数据。

$ /graal-ee-19.2.0/bin/java -Dgraal.PGOInstrument=myclass.iprof MyClass
$ /graal-ee-19.2.0/bin/native-image --pgo=myclass.iprof MyClass
$ ./myclass

性能

当没有配置文件可用时,我们改进了 GraalVM 企业版中原生镜像的吞吐量。运行 Micronaut GraalVM 示例表明,在 19.2 版本中,CPU 时间减少了约 10%,每 CPU 秒的请求吞吐量提高了约 10%。

我们还解决了一个常见的可用性问题,即标记为在运行时初始化的类在构建时被意外初始化。引入了标志 -H:+TraceClassInitialization 来帮助跟踪哪些类在运行时被初始化。

JavaScript

  • 我们添加了对日期、时间、时区、瞬时和持续时间互操作类型的支持,以在多语言环境中区分来自不同语言的日期类对象(参见 GraalVM SDK 和 Truffle API 的更改)。
  • 添加了 Context.Builder.timeZone 来设置时区。
  • 我们实现了 TC39 提案数字分隔符。它在 ECMAScript 2020 模式下可用(--js.ecmascript-version=2020)。
  • 我们将用于国际化 API(例如日期和时间格式、数字格式、每种受支持语言的排序规则)的 ICU 数据,以前作为单独文件分布在 <JAVA_HOME>/jre/languages/js/icu4j/icudt 中,现在移动到 JavaScript (js) 的可执行文件中。

更多更改列在 JavaScript 组件更新日志中。

LLVM 解释器

我们增加了使用 LLVM 工具链将原生程序编译为比特码的初步支持。LLVM 工具链是一套用于将 C 和 C++ 等原生项目编译为可由 GraalVM LLVM 运行时执行的比特码的工具和 API。其旨在简化希望使用 GraalVM LLVM 运行时的用户和语言实现者的预编译。为此,我们提供了启动器,它们使用特殊标志调用 C/C++ 编译器以生成可由 GraalVM LLVM 运行时执行的结果。更多详细信息,请查阅LLVM 参考文档

此工具链是此版本中的一项实验性功能。GraalVM LLVM 运行时的完整更改列表可在更新日志中找到。

Ruby

Ruby 语言组件的完整更改列表可在 GitHub 上找到。主要更改包括:

  • 实现了对 Fiddle 的支持——这是一个用于翻译外部函数接口 (FFI) 和 Ruby 的 libffi 封装的扩展。
  • 在兼容性方面,Thread.report_on_exception 现默认与 MRI 2.5+ 一样为 trueBigDecimal 兼容性在多个方面得到了普遍改进。
  • 通过优化 String 方法,使其在 String 中搜索单字节字符时使用矢量指令,从而提高了性能。
  • 修复了社区报告的几个错误:
    • RbConfig::CONFIG['ruby_version'] 设置为与 TruffleRuby 版本相同的值。这解决了使用 Bundler 在不同 TruffleRuby 版本之间重用 C 扩展的问题(#1715)。
    • 改进了与单线程语言交互时的错误处理(#1709)。

R

  • 添加了一个新的 fastRCluster 包,允许在 GNU-R 中运行 FastR:
    1. 在 GNU-R 或 RStudio 中安装,命令为:devtools::install_github('oracle/fastr/com.oracle.truffle.r.pkgs/fastRCluster')
    2. 使用 ?fastRCluster 了解更多信息。
  • 解决了 SET_ATTRIB 未按预期验证属性的问题。

更新日志可在 GitHub 上找到。

Python

GraalVM Python 的实现仍处于实验阶段,我们正在努力提高其完整性。

  • 实现了 PyStructSequence_* C API——标准结构化预测函数。
  • 添加了对更多 C API 函数的支持,如 PyEval_InitThreadsPyEval_ThreadsInitialized,以及类型属性,即 nb_remaindernb_subtractoverflowedrecursion_depth 线程状态字段。
  • 修复了 REPL 中错误打印和堆栈跟踪中完整路径的问题。

更多详细信息可在 GitHub 上的项目更新日志中找到。

GraalVM 集成商的 API 更改 (SDK + Truffle)

我们实现了使用 PolyglotAccess.newBuilder() 配置自定义多语言访问的能力。它允许为多语言绑定以及多语言之间配置细粒度访问控制。例如,给定一个 TruffleObject 作为值,需要确定该对象的语言和类型。此功能对于 Oracle RDBMS 内的 GraalVM 执行至关重要。

GraalVM 19.2.0 版本还在多语言 API 中添加了对日期、时间、时区和持续时间值的支持,并引入了 Context.Builder.timeZone(ZoneId) 类来配置多语言上下文的默认时区。

各版本之间 GraalVM SDK 和 Truffle API 的主要更改总结在:

工具

Java Flight Recorder (JFR) 支持的预览版已作为 GraalVM 19.2.0 附带的 VisualVM 工具的插件发布。该插件读取从 Java 7 及更高版本创建的所有 JFR 快照,并以用户熟悉的典型 VisualVM 视图呈现数据。

要安装 JFR 支持,请从 graalvm.org/downloads 下载 GraalVM 19.2.0,解压并运行:/bin/jvisualvm 启动 VisualVM。使用“工具 | 插件 | 可用插件”列出所有可用插件并安装 VisualVM-JFR 和 VisualVM-JFR-Generic 模块。JFR 快照可以通过“文件 | 加载…”操作打开,或通过双击 JFR 快照节点并永久将快照添加到 JFR 存储库中。请按照您的 Java 安装文档了解如何创建 JFR 快照。

JFR 支持目前是一项实验性功能。一些高级功能,例如分析 JVM 内部、显示事件堆栈跟踪或支持从实时进程创建 JFR 快照,在预览版中尚不可用,并将在后续版本中逐步解决。

GraalVM 更新实用程序

我们修复了一个问题,即 GraalVM 企业版默认会从 GitHub 下载 GraalVM 社区版组件。如果您正在使用 GraalVM 社区版——没有任何变化,您仍然可以像以前一样安装组件,并且 gu 将在 GitHub 上找到必要的 jar 文件并正确安装它们。

gu install native-image ruby R python

如果您正在使用 GraalVM 企业版,您可以从 GitHub 安装 Rllvm-toolchain 组件,例如:

gu install R

其他组件可从OTN 页面获取,并可以从手动下载的文件安装,例如,要安装 native-image 支持,请运行:

gu -L install native-image-installable-svm-svmee-darwin-amd64-19.2.0.jar

版本日历

您现在可以参考GraalVM 版本日历,了解 GraalVM 发布模型并为即将发布的版本做准备。

联系我们