20.3.6

(2022-04-26)

这是 GraalVM 社区版的 2022 年 4 月关键补丁更新 (CPU)。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.5 的上一个版本。

GraalVM 社区版所基于的 OpenJDK 版本已更新至 11.0.15 ,适用于基于 Java 11 的 GraalVM 社区版。请参阅 OpenJDK 11.0.15 更新

20.3.5

(2022-01-18)

这是 GraalVM 社区版的 2022 年 1 月关键补丁更新 (CPU)。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.4 的上一个版本。

GraalVM 社区版所基于的 OpenJDK 版本已更新至 11.0.14 ,适用于基于 Java 11 的 GraalVM 社区版。请参阅 OpenJDK 11.0.14 更新

20.3.4

(2021-10-19)

这是 GraalVM 社区版的 2021 年 10 月关键补丁更新 (CPU)。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.x 的上一个版本。

GraalVM 社区版 20.3.4 已更新至 11.0.13 ,适用于基于 Java 11 的 GraalVM 社区版。请参阅 OpenJDK 11.0.13 更新

20.3.3

(2021-07-20)

GraalVM 社区版 20.3.3 是一个关键补丁更新 (CPU) 版本。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.x 的上一个版本。

它还包括

20.3.2

(2021-04-20)

GraalVM 社区版 20.3.2 是一个关键补丁更新 (CPU) 版本。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.x 的上一个版本。

它还包括

20.3.1.2

(2021-02-11)

这是 GraalVM 20.3.x 分支的一个错误修复版本。它包含对 GraalVM Updater 的操作性更改——这是一个用于安装可选 GraalVM 语言运行时和实用程序,以及更新本地 GraalVM 安装的工具。

  • 增强了升级策略,以防止在从 GraalVM 社区版迁移到 GraalVM 企业版 (gu upgrade --edition ee) 时出现组件未升级的情况。
  • 改进了当用户被提示接受“Oracle GraalVM Enterprise Edition Native Image License”时 gu 对许可证接受的处理。

20.3.1

(2021-01-19)

GraalVM 社区版 20.3.1 是一个关键补丁更新 (CPU) 版本。它基于 OpenJDK CPU,并包含了作为该 CPU 一部分发布的所有 OpenJDK 安全修复。这是一个完整的分发版,取代了 GraalVM 社区版 20.3.0 的上一个版本。

它还包括以下内容

  • 更新至 OpenJDK 版本 8u282,适用于基于 Java 8 的 GraalVM 社区版,请参阅 OpenJDK 8u282 更新
  • 更新至 OpenJDK 版本 11.0.10,适用于基于 Java 11 的 GraalVM 社区版,请参阅 OpenJDK 11.0.10 更新

20.3.0

(2020-11-17)

Java

  • GraalVM 社区版基于 OpenJDK 1.8.0_272 和 OpenJDK 11.0.9。
  • Oracle GraalVM 企业版基于 Oracle JDK 1.8.0_271 和 Oracle JDK 11.0.9。您可以在 Oracle 技术网络网站上找到这些版本的 Oracle JDK 发布说明。
  • 改进了从 libgraal 加载类,现在可以在其初始化之后消除或延迟加载。这提高了在迭代时间非常短(毫秒级)的工作负载上的性能。它还修复了与 VM 假设 JIT 编译器不加载类相关的问题,这些问题可能导致竞争条件,有时甚至是死锁。
  • 改进了条件移动优化:GraalVM 企业版包含一项优化,它使用 CPU 的条件移动 (CMOV) 指令来实现某些条件语句。在此版本中,我们改进了这项优化,以便为对条件移动指令敏感的工作负载提供更高且更可预测的性能。(仅在 GraalVM 企业版中可用。)
  • 改进了 GraalVM 企业版中针对循环剥离优化的启发式算法,适用于首次迭代延迟初始化数组对象的工作负载。这是 GraalVM 的 Python 运行时中 Python 迭代器的一个常见模式。它使得微型 Python 基准测试的性能提升高达 40%。(仅在 GraalVM 企业版中可用。)
  • 改进了 GraalVM 企业版生成的用于初始化新分配数组的代码,修复了大型数组分配被初始化两次的性能问题。(仅在 GraalVM 企业版中可用。)
  • 改进了 GraalVM 企业版中代码重复优化的启发式算法,这使得在某些 LLVM 工作负载上的峰值性能提升高达 17%,在某些 Java 工作负载上提升 5%。(仅在 GraalVM 企业版中可用。)

原生镜像

  • 改进了容器感知:在 Linux 上,资源限制——处理器数量、内存大小——从 cgroup V1V2 配置中读取。处理器数量也可以使用命令行选项 -XX:ActiveProcessorCount= 进行覆盖。
  • 改进了“隔离编译”,它将应用程序和运行时编译器相互分离,通过减少它们之间的干扰(例如由于垃圾回收)来提高性能。
  • G1 垃圾收集器现在也支持使用运行时编译代码的本地镜像。它可以在镜像构建时使用选项 --gc=G1 启用。G1 支持目前仅限于 AMD64 架构的 Linux。Windows 和 macOS 支持将在未来的版本中提供。G1 现在还支持性能计数器(当镜像使用 -H:+AllowVMInspection 构建时)。(仅在 GraalVM 企业版中可用。)
  • 改进了启用和禁用断言的选项,现在支持完整的语法来指定包名和类名。断言需要在镜像构建时配置,使用选项 -ea / -da / -esa / -dsa。“系统断言”的定义已扩展,不仅包括 JDK 中的断言,还包括 Native Image 运行时系统中的断言,例如在垃圾收集器实现中。
  • 增加了 Windows 上的基本调试信息生成功能(与红帽合作开发)。
  • 增加了许多小的性能和内存占用优化。特别是,新的类型检查实现提高了 Class.isInstanceClass.isAssignableFrom 的性能,同时在镜像堆中使用了更少的类型数据。
  • 增加了对方法句柄的支持,这些方法句柄表示对 Reflection API 可访问的单个方法的调用,且不通过 Method Handles API 应用任何转换,例如对 MethodHandle.bindTo()MethodHandle.asType() 的调用。要启用此功能,请使用 --report-unsupported-elements-at-runtime
  • 许多其他错误修复和改进可在 GitHub 仓库中找到。

语言和工具实现者的更新

  • 默认启用了编译器线程的弹性分配,根据可用处理器数量,在 JVM 和本地模式下均可。旧行为(1 或 2 个编译器线程)可以使用 --engine.CompilerThreads=0 明确启用。
  • 增加了 ThreadsActivationListener,用于监听工具中的线程进入和离开事件。
  • 增加了新标志,用于在部分评估期间检查扩展:--engine.TraceMethodExpansion=truffleTier--engine.TraceNodeExpansion=truffleTier--engine.MethodExpansionStatistics=truffleTier--engine.NodeExpansionStatistics=truffleTier。建议语言实现启用这些标志并检查其输出是否存在意外结果。有关详细信息,请参阅 Optimizing.md
  • 增加了 TruffleInstrument.Env.getOptions(TruffleContext) 以检索工具的上下文特定选项,以及 TruffleInstrument.getContextOptions() 以描述这些选项。如果工具需要按上下文配置,这会很有用。
  • 增加了在语言和工具中创建上下文和上下文线程本地变量的能力。有关详细信息,请参阅 ContextLocalContextThreadLocal 类。
  • 增加了 NodeLibrary,它提供与特定 Node 位置相关的客体语言信息,主要是局部作用域,以及 TruffleLanguage.getScopeTruffleInstrument.Env.getScope,它们提供客体语言的顶级作用域对象。
  • 增加了 ByteArraySupport:一个辅助类,提供从字节数组中安全地访问多字节原始类型的功能。
  • 增加了异常的新基类,请参阅 AbstractTruffleException。原始的 TruffleException 已被弃用。增加了用于异常处理的新互操作消息,取代了已弃用的 TruffleException 方法。
  • 增加了新的专业化工具,用于打印专业化实例和执行计数的详细统计信息。有关如何使用的详细信息,请参阅 专业化统计
  • 更多详细信息可从 变更日志中获取。

Polyglot 嵌入器更新

  • 增加了 Context.interrupt(Duration) 以中断多语言 Context 执行。中断是非破坏性的,这意味着多语言 Context 仍可用于后续执行。
  • 增加了为 HostAccess 配置指定目标类型映射的 TargetMappingPrecedence 的能力,它影响相对于默认映射和其他目标类型映射的转换顺序和优先级。
  • 增加了 log.file 选项,允许将所有语言、工具或引擎日志重定向到文件。使用 Context.Builder.logHandler 方法配置的处理程序优先于新选项。
  • 增加了基于 Truffle 语言实现框架实现的语言的实验性沙箱资源限制。(仅在 GraalVM 企业版中可用。)
  • 更多详细信息可从 变更日志中获取。

JavaScript

  • Node.js 已更新至版本 12.18.4。
  • 修复了 Nashorn 兼容模式下的字段/getter/setter 访问顺序,请参阅 #343
  • 修复了 Nashorn 兼容模式下的“找到多个适用重载”错误,请参阅 #286
  • 在 Nashorn 兼容模式下,启用了低优先级有损数字、字符串到布尔值以及数字到布尔值的转换。
  • 修复了 Java.extend 以遵循 HostAccess.Builder.allowImplementations,请参阅 #294
  • 增加了 Java 主机互操作性支持,用于将 JavaScript 对象映射到抽象类(如果 HostAccess 允许)。
  • 增加了 js.foreign-object-prototype 作为受支持的选项,用于为模仿 JavaScript 类型的外部对象设置 JavaScript 原型。它从 js.experimental-foreign-object-prototype 重命名而来。
  • 更改了 ToPrimitive 抽象操作,使其遵循外部对象的规范。ToPrimitive/ToString 转换不再使用 InteropLibrary.toDisplayString

Ruby

  • 增加了将外部空对象作为虚假值处理的功能 (#1902)。
  • 通过禁用 RubyGems 提高了安装后钩子的可靠性 (#2075)。
  • 修复了顶级异常处理程序以打印异常原因 (#2013)。
  • 修复了 super() 的后置参数处理 (#2111)。
  • 修复了词法分析器中非 ASCII 编码的常量/标识符检测 (#2079, #2102)。
  • 修复了将 --jvm 作为应用程序参数解析的问题 (#2108)。
  • 增加了对 FFI::Pointer 访问的边界检查,当已知其背后内存大小时。
  • eval 实现了负行号 (#1482)。
  • readline 标准库已从 JLine 2 迁移到 JLine 3。
  • 增加了各种预热改进,显著减少了拆分,并且更多操作以内联方式完成,无需调用。
  • 改进了特殊变量 $~$_ 的设置和访问,它们已重构以减少拆分。
  • 更多详细信息可从 变更日志中获取。

R

Python

  • Python 已更新至版本 3.8.5。
  • 增加了实验性的新 HPy 原生 API,因此现在可以通过 HPy 运行 piconumpy
  • 独立的 graalpython 版本现在可以通过 pyenv 安装。
  • 对标准库类型和模块的单元测试进行了多项修复,包括:complexbytesbytearray、特殊描述符的子类化、类型布局、floatgeneratorsmodules、参数传递的边缘情况、字符串字面量和编码、importimportlibdecimalglobbuiltin 模块、jsonmathoperator、数字塔、syswarningsrandomf-stringsstructitertoolssuper

LLVM 运行时

  • 在 GraalVM LLVM 运行时中增加了对代码共享的支持。这使得常见位码库的 AST 和编译代码可以在单个引擎内的多个上下文中共享,从而提高性能。
  • LLVM 工具链已更新至版本 10.0.0。
  • 改进了跨语言边界的 va_list / varargs 处理。在从外部语言调用的 LLVM 函数中使用 va_start 不再强制所有参数进入原生内存。生成的 va_list 对象可以传递给其他语言编写的代码,并使用标准互操作 API 在那里访问。
  • 引入了 Handles API,用于在原生内存中存储受管理指针。
  • polyglot.h 移动到 graalvm/llvm/polyglot.h,并将 llvm/api/toolchain.h 移动到 graalvm/llvm/toolchain-api.h。旧的头文件位置已被弃用,并将在未来版本中移除。
  • libpolyglot-mock.so 重命名为 libgraalvm-llvm.so。旧名称已被弃用,并将在未来版本中移除。

工具

Visual Studio Code 扩展

  • 增强了 VSCode GraalVM 扩展,增加了
    • Java 语法高亮
    • Java 代码补全
    • 安装向导,可从 UI 下载并安装 GraalVM 社区版或 GraalVM 企业版
    • 集成的 Java 调试器,具备您对功能齐全的 IDE 调试器(如 Netbeans IDE)所期望的所有功能
    • 集成的多语言调试器,允许调试 Javascript、Python、R、Ruby 和其他 GraalVM 语言
  • 实现了一个 VS Code Micronaut 扩展,该扩展
    • 利用了 Graal VS Code Java 扩展的所有强大功能
    • 包含一个 Micronaut 项目向导,用于创建新的 Micronaut 应用程序
    • 包含 Gradle 和 Maven 支持
    • 包含使用 GraalVM Native Image 轻松地从 Micronaut Gradle 应用程序创建原生可执行文件的支持

GraalVM 仪表板

  • 使用 OracleJET 重新实现了 GraalVM 仪表板。
  • 更新了 GraalVM 仪表板,以接受 BGV 中 Native Image 转储文件的新格式。

联系我们