服务更新 5

此更新包含重要更改。

跳至 服务更新 5 修订包 5

跳至 服务更新 5 修订包 10

跳至 服务更新 5 修订包 15

跳至 服务更新 5 修订包 16

跳至 服务更新 5 修订包 17

跳至 服务更新 5 修订包 20

跳至 服务更新 5 修订包 25

跳至 服务更新 5 修订包 26

跳至 服务更新 5 修订包 27

跳至 服务更新 5 修订包 30

跳至 服务更新 5 修订包 31

跳至 服务更新 5 修订包 35

跳至 服务更新 5 修订包 36

跳至 服务更新 5 修订包 37

跳至 服务更新 5 修订包 40

跳至 服务更新 5 修订包 41

服务更新 5

Java™ 版本输出
java -versionjava -showversion 命令行选项以及 java.version 系统属性的输出将更新为包含 IBM SDK 所基于的 Oracle 构建号。 例如,字符串 1.8.0_141 表示 SDK 基于 Oracle SE 1.8 类库更新 141 (U141)。

输出还包含用于指示版本、发行版、修订版和修订包编号 (V.R.M.F) 的更改。 例如,Java(TM) SE Runtime Environment (build 8.0.5.0 ... 反映 V8 SR5。

在 JVM 空闲时管理 Java 对象堆 (仅限Linux® )
以下调整选项可用于在 JVM 空闲时管理 Java 对象堆:
有助于缩短暂停时间的新垃圾回收方式
提供了可与分代并发 (gencon) 垃圾回收策略配合使用的新方式。 启用此方式后,对于对响应时间敏感的大型堆应用程序,JVM 会尝试减少 GC 暂停时间,以改善吞吐量稳定性。 该方式由 -Xgc:concurrentScavenge 选项控制,该选项至少需要 z/OS® V2R3 (或具有 APAR OA51643的 z/OS V2R2 ) 和 z14 硬件,并且仅支持 64 位 JVM。 未满足操作系统和硬件要求时,将忽略此选项。
JIT 编译器能够分配高于 2 GB 的内存 (仅限z/OS )
在 z/OS V2R3 系统上,缺省情况下会启用 64 位程序 (RMODE64) 的驻留方式。 此功能允许 JIT 分配 2 GB 内存界限以上的可执行代码高速缓存。 除非在命令行上指定 -Xjit:disableRMODE64 选项,否则这是缺省行为。 有关更多信息,请参阅 disableRMODE64 (仅限z/OS )
调整共享类高速缓存
现在,可以对共享类高速缓存的内容创建软限制,此类内容可通过 MXBean 以编程方式进行查询和调整,或者通过命令行选项进行修改。 运行多个相似的服务器时,监视和调整高速缓存大小的能力有助于减少资源占用量和启动时间。

如果像先前发行版中一样指定 -Xscmx 选项,那么无行为更改;此选项指定新共享类高速缓存的大小。 但是,如果还指定新的 -XX:SharedCacheHardLimit 选项,那么 -Xscmx 选项指定新共享类高速缓存的软最大大小,并且 -XX:SharedCacheHardLimit 选项指定实际最大大小。 达到软最大大小限制时(高速缓存处于软性满状态),除非增大软最大大小限制,否则无法将数据添加至该高速缓存。 更多信息,请参阅-Xscmx 选项-XX:SharedCacheHardLimit选项

改善了 MXBean 兼容性
为改善与下列 com.sun.management 类的兼容性,已更新 java.lang.mangement API 的监视和管理接口扩展。
  • GarbageCollectorMXBean
  • GarbageCollectionNotificationInfo
  • GcInfo
  • OperatingSystemMXBean
  • UnixOperatingSystemMXBean
此兼容性包括这些 com.sun.management 类所提供的全套 API 的类强制类型转换兼容性和实现。 有关更多信息,请参阅 Language Management API 参考
如果依赖于先前接口扩展的输出,那么可以使用下列新选项来恢复该实现的行为:
  • -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns
  • -XX:[+|-]HeapManagementMXBeanCompatibility
有关这些选项的更多信息,请参阅 OperatingSystemMXBean.getProcessCpuTime() 方法返回值的变化改进的内存池和垃圾回收活动监控
OperatingSystemMXBean.getProcessCpuTime() 方法返回值的更改
OperatingSystemMXBean.getProcessCpuTime() 方法已更改为返回以纳秒(而非百纳秒)为单位的值,从而实现与 com.sun.management.OperatingSystemMXBeanUnixOperatingSystemMXBean 接口兼容。 您可以使用 -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns 选项 系统属性来还原到先前的行为。
改善了内存池及垃圾回收活动监视
为了帮助您了解应用程序的行为,对 IBM® 垃圾收集器和内存池 MXbean 进行了增强。 在先前发行版中,将汇总并报告整个 Java 堆的内存池信息。 在此发行版中,可以获取有关垃圾回收策略的内存池和垃圾收集器活动的更多详细信息。

如果监视应用程序编写为仅期望一个堆内存池,或者依赖于内存池名称 Java heap,那么您可以使用 -XX:+HeapManagementMXBeanCompatibility 选项还原为先前的实现。 有关该选项以及提供的新 "MemoryPool和 "GarbageCollector名称的更多信息,请参阅-XX:[+|-]HeapManagementMXBeanCompatibility选项

-XX:[+|-]InterleaveMemory 缺省情况下已禁用 (AIX®, Linux和 Windows)
现在,内存交错在缺省情况下已禁用。 更多信息,请参阅-XX:[+|-]InterleaveMemory选项 (AIX、Linux 和 Windows)
“延迟连接”代理程序可以重新定义或重新转换各个类
缺省情况下,“延迟连接”代理程序可以重新定义或重新转换各个类。 您不再需要使用 IBM SDK Java Technology Edition V 8: 补充信息中描述的 -XX:+EnableHCR 选项来启用此功能。 有关 Java 连接 API 的更多信息,请参阅 OpenJ9 用户文档中的 Java 连接 API
改善了 VM 挂钩的诊断信息
添加了新的跟踪点,当 VM 挂钩的回调(例如,类上载挂钩)超出时间阈值时,就会触发这些跟踪点。 触发时,将在 Java 转储输出中生成新节。 跟踪点和 Java 转储提供了足够的信息来标识回调。

有关更多信息HOOKJava 转储文件的部分,请参阅 OpenJ9 用户文档中的 Hook (HOOK) 。 有关跟踪点的更多信息,请参阅 J9 VM 参考中的 跟踪 Java 应用程序

使用大页面尺寸 "(仅限Linux on IBM Z和 "z/OS时,不再需要额外的内存页
当指定的对象堆大小是大页面大小的倍数时,不再需要支持另一个内存页面。 例如,在先前发行版中,如果页面大小为 2 GB,那么设置 -Xmx2G 实际使用 4 GB 内存。 为避免使用更多内存,必须通过至少减去 16 个字节来使堆大小略小于整数页数。 例如,对于 2 GB 页面大小,必须指定最大堆大小 -Xmx2147483632(2147483648 减去 16 个字节),而不是 -Xmx2048m (2 GB)。 对于 4 GB 页面大小,必须指定堆大小 -Xmx4294967280(4,294,967,296 减去 16 个字节),而不是 -Xmx4096m (4 GB),如此类推。 从此发行版开始,不必减小堆大小。
初始 Java 堆大小的缺省值
-Xms 选项可设置 Java 堆的初始大小。 如果未在命令行上设置此选项,那么在缺省情况下,垃圾收集器会设置 8 MB 的初始大小。 在先前发行版的 SDK 中,垃圾收集器会设置 4 MB 的缺省值。 有关此设置的更多信息,请参阅 OpenJ9 用户文档中的 -Xms 选项
-Xthr:<fastNotify|noFastNotify> 选项
现在,您可以使用 -Xthr:fastNotify 来增加应用程序的吞吐量,尤其是在正常使用 waitnotify 导致大量线程尝试获取 Java 监视器时。 有关更多信息,请参阅 OpenJ9 用户文档中的 -Xthr 选项
不再支持某些 -Xzero 子选项
不再支持 j9zipnoj9zipsharezipnosharezip 子选项。 指定这些选项时,将会予以解析,但不会执行任何操作。 有关这些选项的更多信息,请参阅 OpenJ9 用户文档中的 -Xms 选项
Attach API 异常现在以 com.sun 开头
Attach API 异常现在前缀 com.sun.tools.attach,代替 com.ibm.tools.attach
缺省情况下关闭运行时检测设施 (仅限AIX, Linux和 z/OS )
在先前的更新中,在所有支持 RI 工具的平台上,缺省情况下都会启用 RI 工具。 现在,RI 工具在缺省情况下已禁用。 更多信息,请参阅OpenJ9用户文档中的-XX:[+|-]RuntimeInstrumentation
Strings 的更改以支持 CompactStrings
为支持紧凑型 Strings (-XX:+CompactStrings), java.lang.String 不再包含偏移量字段,偏移量字段用于在基础 char[] 数据中指示 String 的起始位置。 在代码中对 beginIndex 的值 (零除外) 使用以下方法时,可能会影响性能:
  • String.substring(int beginIndex)
  • String.substring(int beginIndex, int endIndex)

在更低发行版中,创建了新的 String,但是底层 char[] 与原始 String 共享,以便不会复制 char[] 数据。 如果由于现在复制 char[] 数据而导致性能显著下降,请尝试重新实现代码,以避免复制 String 数据。

注: 编写为在使用 HotSpot VM 的 Java 实现上运行的应用程序不受影响,因为会复制 String 数据,即使使用零 beginIndex 也是如此。
打包对象评估技术已移除
打包对象技术预览不再可用。

服务更新 5 修订包 5

此发行版包含最新的 IBM 修订, 2017 年 10 月的 Oracle 关键补丁更新 (CPU) 以及以下更新:
对 Java 版本信息的更改
java -version 命令的输出已更改。 以下是一个示例:
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 8.0.5.5 - pxa6480sr5fp5-20171109_02(SR5 FP5))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64 Compressed References 20171102_369060 (JIT enabled, AOT enabled)
OpenJ9 - 7ade437
OMR - 1b656cb
IBM - 59c3d96)
JCL - 20171109_01 based on Oracle jdk8u151-b12
OpenJ9 开头的行将替换先前更新的输出中的行 J9VMJIT,因为这些组件现在已添加到 Eclipse Foundation 的 Eclipse OpenJ9 项目下
AIX 支持
从此刷新以及对于所有将来的临时修订 (ifixes) , AIX 6.1 的最低受支持级别现在为 TL9。 如果您处于较低的维护级别,那么使用某些 com.ibm.language.management API 扩展可能会导致 ProcessorUsageRetrievalExceptionGuestOSInfoRetrievalException 异常。
配置 Java 进程的打开文件描述符计数
进程中的最大打开文件描述符数由操作系统控制。 在 UNIX 系统上,通过设置系统硬限制或 ulimit来配置此数字。
为了避免在启动处理期间过度使用资源, IBM SDK 将 Java 进程的最大文件描述符计数限制为 64K。 将实行下列规则:
  • 如果 ulimit 值大于 64K,那么文件描述符计数缺省为 64K。
  • 如果 ulimit 值小于 64K,那么文件描述符计数匹配 ulimit 值。
如果应用程序需要大量的打开文件描述符,或者启动性能受到所设置的缺省限制的影响,那么可以通过设置以下环境变量来配置该值:
export IBM_JAVA_FDLIMIT=file_descriptor_count
其中,file_descriptor_count 是小于您的系统 ulimit 的值。

服务更新 5 修订包 10

此发行版包含最新的 IBM 修订和 2018 年 1 月的 Oracle 关键修补程序更新 (CPU)。

安全性检查
对于 Eclipse OpenJ9 VM,为了加强安全,在启用 SecurityManger 时,缺省情况下现已启用以下 API 中的安全性检查:
  • com.ibm.jvm.Dump.JavaDump()
  • com.ibm.jvm.Dump.HeapDump()
  • com.ibm.jvm.Dump.SnapDump()
  • com.ibm.jvm.Log.QueryOptions()
  • com.ibm.jvm.Log.SetOptions(String)
  • com.ibm.jvm.Trace.set(String)
  • com.ibm.jvm.Trace.snap()
  • com.ibm.jvm.Trace.suspend()
  • com.ibm.jvm.Trace.suspendThis()
  • com.ibm.jvm.Trace.resume()
  • com.ibm.jvm.Trace.resumeThis()
  • com.ibm.jvm.Trace.registerApplication(String, String[])
  • com.ibm.jvm.Trace.trace(<any parameters>)
通过在命令行上设置以下系统属性,可以禁用这些 API 的安全性检查:
  • -Dcom.ibm.jvm.enableLegacyTraceSecurity=false
  • -Dcom.ibm.jvm.enableLegacyDumpSecurity=false
  • -Dcom.ibm.jvm.enableLegacyLogSecurity=false

服务更新 5 修订包 15

除了最新的 IBM 修订和 2018 年 4 月的 Oracle 关键补丁更新 (CPU) 之外,此发行版还包含以下更改:
安全性检查
如果将 SecurityManager 用于类数据共享,并且运行中的应用程序调用 com.ibm.oti.shared.SharedClassUtilities API getSharedCacheInfo()destroySharedCache(),那么必须向调用这些 API 的代码授予相应的 SharedClassesNamedPermission。 有关示例代码,请参阅 OpenJ9 用户文档中的 支持定制类装入器
用于控制转储处理的新 MXBean
在启动时,可以通过命令行选项 -Xdump 来控制转储和跟踪诊断数据的生成。 如果您想更改转储配置,那么必须重新启动该应用程序。 为避免重新启动,您可使用 com.ibm.jvm.Dump 应用程序处理接口 (API) 来动态更改配置。 现在有一个新的 MXBean 可供您用来调用转储 API 方法,以便远程监视正在远程服务器或容器中运行的应用程序时动态配置转储。
有关配置选项的更多信息,请参阅 API 文档
硬件支持
此次更新增加了对IBM POWER9的支持,但此后又进行了包括安全修复在内的重要修正。 如果您正在使用 IBM POWER9,那么应至少升级到修订包 30。
操作系统支持
现在,支持以下操作系统:
  • Red Hat® Enterprise Linux (RHEL) 7.5
  • Ubuntu 18.04
现在Linux on IBM Z支持并发清除模式
-Xgc:concurrentScavenge 选项现在在具有 RHEL 7.5 和 Ubuntu 18.04 的 IBM z14 硬件上支持以下级别和配置:
操作系统
  • RHEL 7.5(最低内核级别为 4.14)
  • Ubuntu 18.04
系统管理程序
  • 具有 QEMU 2.10 或更高版本的 KVM 解决方案,最低主机内核级别为 4.12
用于在 z/OS 上的 ICONV 和 Java 转换器之间进行切换的新环境变量
缺省情况下,使用 ICONV 实用程序将字符从一个代码页转换到另一个代码页。 但是,在某些情况下,ICONV 会将字符转换成在某些平台上无法识别的字符。 例如,ICONV 将 EBCDIC 代码 x'25'(换行)转换为 Unicode '\u0085'(下一行),这会导致 XML 解析器发生问题。
可以设置以下环境变量以选择 Java 转换器:
USE_JAVA_CONV=1
缺省情况下,环境变量设置为 USE_JAVA_CONV=0,这将使用 ICONV 实用程序。

服务更新 5 修订包 16

修订包 16 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:

对空闲调整功能的扩展支持
Eclipse OpenJ9 VM 中的空闲调整功能可将未使用的内存退回给操作系统,以保持较小的内存占用量。 与分代并发 (gencon) 垃圾回收策略配合使用时, Linux for IBM POWER ® 和 IBM Z® 上现在提供了此功能部件以及 x86 体系结构。 有关此功能的更多信息,请参阅控制此行为的以下命令行选项 (在 OpenJ9 用户文档中):
更改为在容器中运行的应用程序的缺省最大 Java 堆大小
使用容器技术时,应用程序通常独立运行,不需要争用内存。 在此更新中,引入了更改来检测 OpenJ9 VM 是否在容器内运行。 如果应用程序正在容器中运行,并且您希望 VM 将较大部分的内存分配给 Java 堆,那么现在可以在命令行上设置 -XX:+UseContainerSupport 选项以获取较大百分比的可用内存。 分配的百分比取决于容器内存限制。 更多信息,请参阅OpenJ9用户文档中的-XX:[+|-]UseContainerSupport

服务更新 5 修订包 17

修订包 17 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:

新的垃圾回收策略
在 Eclipse OpenJ9 VM 中引入了一个新策略,用于以正常方式扩展 Java 堆,但不会通过垃圾回收操作回收内存。 此方式适用于生命周期较短的应用程序,在这些应用程序中,内存足以满足运行时需求。 有关更多信息,请参阅 OpenJ9 用户文档中的 -Xgcpolicy:nogc
指定最大 Java 堆大小 (以百分比值表示)
OpenJ9 VM 现在支持以物理内存量的百分比形式设置堆大小。 识别下列 Oracle HotSpot 选项,可以针对 VM 进行设置:如果应用程序在容器中运行并且您已指定 -XX:+UseContainerSupport,那么容器的缺省堆大小和这些新选项的值都基于可用容器内存。
对嵌套 JAR 文件的共享类支持
为支持嵌套的 JAR 文件,对 com.ibm.oti.shared 应用程序编程接口进行了更改。

服务更新 5 修订包 20

此发行版包含最新的 IBM 修订和 2018 年 7 月的 Oracle 关键补丁更新 (CPU)。

服务更新 5 修订包 25

此发行版包含最新的 IBM 修订和 2018 年 10 月的 Oracle 关键补丁更新 (CPU)。

在此刷新中更改了用于支持 IBM SDK, Java Technology Edition V 8 的文档。 除本 SDK 指南和支持 J9 VM 的参考资料外, IBM Documentation 现在还包含 Eclipse OpenJ9 VM 用户文档。 为避免重复,以前在 J9 VM 参考中提供的部分资料现已移除。 为最大限度减轻此更改的影响,已设置适当的重定向。

有关对 Eclipse OpenJ9 VM 的任何新更改,请参阅 OpenJ9 用户文档中的以下发行说明:

服务更新 5 修订包 26

如 OpenJ9 用户文档所述,修订包 26 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:
新的类数据共享子选项

-Xshareclasses:bootClassesOnly 选项禁用由非引导程序类装入器装入的类的高速缓存。 此子选项还会启用 nonfatal 子选项,即使在创建共享类高速缓存时发生错误,也允许 VM 启动。

如果在创建共享类高速缓存时发生错误,-Xshareclasses:fatal 选项将阻止 VM 启动。 您可能想要在使用 -Xshareclasses:bootClassesOnly 子选项时启用此子选项,以在创建高速缓存时对问题进行故障诊断。

现在,OpenJ9 VM 中的容器感知能力在缺省情况下已启用

使用容器技术时,应用程序通常独立运行,不需要争用内存。 如果 VM 检测到它正在容器环境中运行,并且设置了容器的内存限制,那么 VM 会自动调整最大缺省 Java 堆大小。

在先前发行版中,通过设置 -XX:+UseContainerSupport 选项启用此行为。 此设置现在是缺省值。

现在, Linux x86 平台上提供了无暂停垃圾回收方式

无暂停垃圾回收方式适用于对响应时间敏感的大型堆应用程序。 启用后,VM 会尝试减少 GC 暂停时间。 在先前发行版中,无暂停垃圾回收方式 (-Xgc:concurrentScavenge) 仅在 IBM z14 硬件上可用。 此方式现在在 64 位 x86 Linux 平台上可用。

注: 必须使用分代并发 (gencon) 垃圾回收策略。 (这是缺省策略。)
现在可以将身份散列码限制为非负值
OpenJ9 同时支持正数和负数身份散列码,当您的程序不正确地假定散列码只能是正数时,可能会出现问题。 但是,现在您可以使用 -XX:+PositiveIdentityHash 选项以将身份散列码限制为非负值。 因为将身份散列码限制为非负值可能会影响散列密集型操作的性能,此选项在缺省情况下未启用。
对 OpenJDK HotSpot 选项的支持
为确保兼容,OpenJ9 现在支持下列 OpenJDK Hotspot 选项:
  • -XX:MaxHeapSize,等效于 -Xmx 选项。
  • -XX:InitialHeapSize,等效于 -Xms 选项。
已不推荐使用 IBM_JAVA_OPTIONS
已不推荐使用 IBM_JAVA_OPTIONS 环境变量。 请改为使用新的 OPENJ9_JAVA_OPTIONS 环境变量。

服务更新 5 修订包 27

如 OpenJ9 用户文档所述,修订包 27 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:
改善了灵活性,可以管理 JIT 代码高速缓存的大小
JIT 代码高速缓存存储已编译的 Java 方法的本机代码。 缺省情况下,对于 64 位 VM,代码高速缓存大小为 256 MB,而对于 31/32 位 VM,大小为 64 MB。 在先前发行版中,通过使用 -Xcodecachetotal 命令行选项,可以增大代码高速缓存大小,使其大于缺省值。 在此发行版中,使用此选项也可以减小该大小,其最小大小为 2 MB。 JIT 代码高速缓存的大小还会影响 JIT 数据高速缓存(其中存放有关已编译的方法的元数据)的大小。 如果您使用 -Xcodecachetotal 选项来管理代码高速缓存大小,那么数据高速缓存的大小会按同一比例进行调整。

服务更新 5 修订包 30

如 OpenJ9 用户文档所述,修订包 30 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:
已改善对无暂停垃圾回收的支持

并发清除方式 (-Xgc:concurrentScavenge) 现在在 64 位 Windows 操作系统上受支持。

当 VM 在 Docker 容器中运行时,空闲调整功能在缺省情况下已启用
在先前发行版中,引入了一组空闲调整选项,以在 OpenJ9 VM 处于空闲状态时管理 Java 堆的占用量。 现在,当 OpenJ9 VM 检测到它正在容器中运行,而且 VM 已进入空闲状态时,下列两个选项在缺省情况下已启用:
  • -XX:[+|-]IdleTuningGcOnIdle,用于运行垃圾回收周期并将可用高内存页面释放回操作系统。
  • -XX:[+|-]IdleTuningCompactOnIdle,用于压缩对象堆以减少分段。
缺省情况下,每 180 秒检查一次 VM 以检测空闲状态。 要控制检查之间的等待时间,请使用-XX:[+|-]IdleTuningMinIdleWaitTime选项OpenJ9用户文档)。 要关闭空闲检测,请将值设置为 0。
对缺省共享类高速缓存目录许可权的更改 (非 Windows)
如果不使用 cachDirPerm 子选项以指定共享类高速缓存目录的许可权,并且高速缓存目录不是 /tmp/javasharedresources 缺省值,那么以下更改适用:
  • 创建新的高速缓存目录时,缺省许可权现在更严格。
  • 如果该高速缓存目录已存在,那么许可权现在会保持不变(以前,使用此目录打开高速缓存时,许可权会设置为 0777)。

有关更多信息,请参阅 OpenJ9 用户文档中的 -Xshareclasses

服务更新 5 修订包 31

如 OpenJ9 用户文档所述,修订包 31 在 Eclipse OpenJ9 虚拟机中提供了下列新功能:
实现控制组的 Linux 系统的更好诊断信息
如果使用控制组 (cgroups) 来管理 Linux 系统上的资源,那么有关 CPU 和内存限制的信息现在记录在 Java 转储文件中。 这些信息对于在 Docker 容器中运行的应用程序特别重要,因为在容器中设置资源限制后,Docker 引擎就会依赖于 cgroup 来强制实施这些设置。 如果出现 JavaOutOfMemoryError,是因为对应用程序可用内存量设置了容器限制,而分配的内存不足,则可以通过 Java 转储文件来诊断该问题。 您可以在 ENVINFO 小节中找到 cgroup 信息。
将 Java 转储写入 STDOUT 或 STDERR
现在,您可以使用 -Xdump 命令行选项将 Java 转储文件写入 STDOUT 或 STDERR。
已改善对无暂停垃圾回收的支持
现在,下列平台上支持并发清除方式:
  • IBM POWER LE 上的 Linux
  • AIX

服务更新 5 修订包 35

修订包 35 包括下列更新:
对日本新年号的支持
已添加对新年号“令和”的支持。 有关这些更改的更多信息,请参阅 IBM SDK Java Technology Edition 的日语时代更改
对更多操作系统版本的支持
添加了对 Red Hat Enterprise Linux (RHEL) V 8 和 Windows Server 2019 的支持。 有关受支持操作系统的列表,请参阅 支持的环境
更改为 64 位 z/OS 上的缺省本机堆栈大小
64 位 z/OS 上的操作系统线程的缺省堆栈大小从 384 KB 更改为操作系统最小值 1 MB。 有关此设置的更多信息,请参阅 -Xmso
如 OpenJ9 用户文档所述,修订包 35 还在 Eclipse OpenJ9 虚拟机中提供了下列新功能和增强功能:
用于忽略或报告无法识别的 -XX: 选项的新选项
缺省情况下,将忽略无法识别的 -XX: 命令行选项,这可避免应用程序启动失败。 现在,您可以使用 -XX:-IgnoreUnrecognizedXXColonOptions 来关闭此行为,从而改为报告无法识别的 -XX: 选项。 更多信息,请参阅OpenJ9用户文档中的-XX:[+|-]IgnoreUnrecognizedXXColonOptions
将 Java 转储写入 STDOUT 或 STDERR

现在,您可以使用 -Xdump 命令行选项将 Java 转储文件写入 STDOUTSTDERR 。 请参阅 OpenJ9 用户文档 中的 写入 STDOUT/STDERR 以获取详细信息。

实现控制组的 Linux 系统的更好诊断信息

如果使用控制组 (cgroups) 来管理 Linux 系统上的资源,那么有关 CPU 和内存限制的信息现在将记录在 Java 转储文件中。 这些信息对于在 Docker 容器中运行的应用程序特别重要,因为在容器中设置资源限制后,Docker 引擎就会依赖于 cgroup 来强制实施这些设置。 如果您收到 Java OutOfMemoryError 错误,因为已对应用程序可用的内存量设置了容器限制,并且此分配不足,那么可以从 Java 转储文件中诊断此问题。 您可以在 ENVINFO 小节中找到 cgroup 信息。 有关样本输出,请参阅 OpenJ9 用户文档中的 Java 转储 (ENVINFO)

已改善对无暂停垃圾回收的支持

现在,在 AIX 和 Linux on POWER 上支持并发清除方式 (-Xgc:concurrentScavenge)。

新增的 OpenJ9 选项可阻止使用网络查询来确定主机名和 IP 地址

在缺省情况下,将会使用网络查询来确定主机名和 IP 地址,以便进行故障诊断。 为避免无法访问名称服务器时程序等待超时发生,现在可以阻止执行该查询。 更多信息,请参阅OpenJ9用户文档中的 -XX:[+|-]ReadIPInfoForRAS

新增的试验性选项可改善 JVMTI 受监测字段的性能
本版本引入了-XX:[+|-]JITInlineWatches选项OpenJ9用户文档)。 启用该选项后,它会开启试验性 JIT 操作,以改善 JVMTI 受监测字段的性能。 该选项目前仅支持x86平台(Windows、macOS,和Linux)。
更改为 64 位 z/OS 上的缺省本机堆栈大小
64 位 z/OS 上操作系统线程的缺省堆栈大小从 384 KB 更改为 1 MB。 有关此设置的更多信息,请参阅 -Xmso

服务更新 5 修订包 36

如 OpenJ9 用户文档所述,修订包 36 在 Eclipse OpenJ9 虚拟机中提供了下列新功能和更改:

对共享类高速缓存代号的更改

在所有平台上,存储在共享类高速缓存中的类的格式已更改,这将导致 JVM 创建新的共享类高速缓存,而不是重新创建或复用现有高速缓存。 为了节省空间,可以移除现有的所有共享高速缓存,除非它们正在被较低发行版使用。

服务更新 5 修订包 37

如 OpenJ9 用户文档所述,修订包 37 在 Eclipse OpenJ9 虚拟机中提供了下列新功能和更改:

改善了平台对无暂停垃圾收集的支持

对并发清除模式的支持现已扩展到 "z/OS和 "Linux on IBM Z"。

对于透明超大页面的支持

现在,当您使用 madvise 设置时, VM 支持在 Linux 上分配超大页面。 要启用此功能,启动应用程序时,请在命令行上指定 -XX:+TransparentHugePage 选项。

-XX:[ "+|-]JITInlineWatches选项支持 "z/OS和 "Linux on IBM Z,默认启用

在较低发行版中引入的此选项将开启试验性 JIT 操作,旨在改善 JVMTI 受监测字段的性能。 现在 "z/OS和 "Linux on IBM Z都支持该选项,并默认启用。

对 OpenJDK HotSpot 选项的支持

现在支持 -XX:OnOutOfMemoryError OpenJDK Hotspot 选项以实现兼容性。

移除 -Xdiagnosticscollector 选项

此选项是多余的,现在已将其移除。

服务更新 5 修订包 40

修订包 40 包括下列更新:
JDWP 实现已替换为对应的 OpenJDK
JDWP 用于调试 Java 应用程序,例如,如 标准选项中所述,以及 OpenJ9 文档中的 Java 虚拟机工具接口 。 以往的 JDWP 实现现已替换为对应的 OpenJDK。 这项更改解决了以往实现中存在的问题,确保与开放式源代码软件更加一致。 因为这两个实现不相同,可用的选项也不相同。 下列选项不再存在:versionsrclogtrace。 新增下列选项:launchonthrowonuncaughtmutf8quiet。 有关新的 JDWP 实现的选项的更多信息,请参阅命令行帮助:
java -agentlib:jdwp=help
如 OpenJ9 用户文档所述,修订包 40 还在 Eclipse OpenJ9 虚拟机中提供了下列新功能和更改:
自动设置初始堆大小
作为用户手动设置 -Xms 值和调整大小的替代方法,VM 现在可以学习并设置适合应用程序的初始堆大小。 VM 会在启动处理结束时记录堆大小,从而将此数据写入共享类高速缓存。 通过重新启动多次来设置平均值,这有助于确保用于初始堆大小的值尽可能准确。 记录的堆大小特定于应用程序命令行,因此对于每个唯一的命令行都会存储不同的提示。

要关闭此行为,请在启动应用程序时在命令行上设置 -XX:+UseGCStartupHints 选项。

空闲 GC 期间的压缩试探
在空闲垃圾回收期间,符合特定触发器时,VM 现在会自动压缩堆。 由于这一变更,-XX:[+|-]IdleTuningCompactOnIdle选项已被弃用。
-XX:IdleTuningCompactOnIdle 的行为更改
现在,如果不指定 -XX:+IdleTuningGcOnIdle 选项,那么 -XX:[+|-]IdleTuningCompactOnIdle 选项将不再有效。
内部接口更改
Attach API 内部接口略有更改,影响 SDK 的内部类库以及 tools.jarhealthcenter.jar 文件。
  • 如果应用程序使用先前发行版中 tools.jar 文件的专用副本,那么该应用程序可能无法在此发行版中使用连接 API ,因为 Java 类不匹配。 请改用此发行版中的 tools.jar 文件。
  • 类似,此发行版中的 healthcenter.jar 文件不兼容先前发行版。

服务更新 5 修订包 41

如 OpenJ9 用户文档所述,修订包 41 在 Eclipse OpenJ9 虚拟机中提供了下列新功能和更改:

缺省情况下,已启用自动设置初始堆大小
现在,缺省情况下已启用 -XX:[+|-]UseGCStartupHints 选项,在启用时,该选项将开启自动学习和设置应用程序的适当堆大小。
用于共享 VM 匿名类的选项
在先前发行版中,不会在共享类高速缓存中存储 Unsafe.defineAnonymousClass 创建的匿名类。 现在,缺省情况下这些类已存储在共享类高速缓存中,这意味着它们可用于提前 (AOT) 编译,从而潜在提高了启动性能。 引入一个新选项 -XX:[+|-]ShareAnonymousClasses,该选项使您能够停止在共享类高速缓存中存储匿名类。
Power Systems 上 JVMTI 受监视字段的性能改进
现在,AIX和Linux on Power Systems 也支持 "-XX:[+|-]JITInlineWatches选项,该选项可打开 JIT 操作以提高 JVMTI 观察字段的性能。
Linux on x86: 支持透明超大页面 (THP)
在 x86 系统上的 Linux 上使用 madvise (/sys/kernel/mm/transparent_hugepage/enabled) 设置时,现在缺省情况下会启用 THP。 要禁用此功能,启动应用程序时,请在命令行上设置 -XX:-TransparentHugePage。 当您使用 madvise 时,缺省情况下仍然禁用了其他系统上的 THP 设置,但是可以通过设置 -XX:+TransparentHugePage 来启用 THP 设置。
对共享类高速缓存代号的更改
存储在共享类高速缓存中的类的格式已更改,这将导致 JVM 创建新的共享类高速缓存,而不是重新创建或复用现有高速缓存。 为了节省空间,您可以移除现有的所有共享高速缓存,除非它们正在被较低发行版使用。 由于格式更改,现在在 -Xshareclasses:listAllCaches 选项的输出中显示一个图层列。 此更改是为了支持将来的增强功能。