已知问题与限制

您在特定的系统环境或配置中可能遇到的已知问题或限制。

此处描述的某些问题可能并非该版本的缺陷,因为在可行的情况下,我们已提供了相应的解决方法。

此发行版中新出现的问题或限制

__MAP_64 不支持该标志
在 z/OS 上运行的 Java 25 未启用用于内存映射操作的 __MAP_64 标志。 因此,它无法将大文件(≥ 2 GB)可靠地映射到连续的地址范围中。 有关此行为的更多详细信息,请参阅 mmap() — 映射内存页。 由于这一限制,需要映射超过 Integer.MAX_VALUE 字节且会实例化 Java 对象的操作预计会失败。

例如, MemorySegment.getString(long) 受 Java 中 int 类型大小限制的约束。 如果在映射大小为 的内存段上 getString(100) 调用 ,该操作 size(long) Integer.MAX_VALUE + 100可能会因 IllegalArgumentException 或 而失败 IndexOutOfBoundsException。 这是预期的行为。

影响 :此问题影响使用 Foreign Function & Memory API、 FileChannel.map()或其他内存映射文件操作且超过 限制 Integer.MAX_VALUE 的应用程序。 由于这些限制,内存映射操作实际上被限制在约 1.5 GB 至 2GB 之间,具体取决于系统配置(特别是 BPXPRMxx 中的参数 MAXASHARE )。

解决方法: 将大文件拆分为多个较小的文件(每个小于 2 GB),并分别进行映射,而不是将整个文件作为单个 Java 对象加载到内存中。 或者,可以使用传统的文件 I/O 操作,而不是内存映射。

系统要求: 请确保将 z/OS 系统参数 MAXASHAREMAXMMAPAREA 配置为支持至少2 GB的可寻址范围。 如有必要,请联系系统管理员以核实并调整这些设置。

在 COMPAT 模式下,不支持解析采用 IBM‑1047 (EBCDIC)编码的证书
在 z/OS 上的 Java 25 中, X.509 的证书解析需要 UTF‑8 编码的输入。 在 COMPAT 模式或 FIPS 模式下使用 IBM‑1047 (EBCDIC)编码时,证书解析会失败。 在内部,该 X509Factory.parseX509orPKCS7Cert() 方法(由 调用 CertificateFactory)作为 JEP 400 之后编码检测逻辑的一部分,强制执行 UTF‑8。 因此,使用 IBM‑1047 编码的证书数据无法被解析,导致 CertificateException: No certificate data found……
支持的配置:
  • Java 25 默认模式( UTF‑8 )
不支持的配置:
  • Java 25 兼容模式( IBM‑1047 )
此行为符合设计预期,并与以下 JEP 引入的平台编码变更保持一致。
z/OS 文件时间戳限制
在 z/OS 中,操作系统提供的文件时间戳值仅具有秒级精度。 因此,无论提供的毫秒值为何,以下 API 都会返回或更新精度为秒级的时间戳:
  • File.setLastModified()
  • File.lastModified()
  • ZipEntry.setTime()
  • ZipEntry.getTime()
注: 此限制是 z/OS 平台的固有特性,在之前的版本中也存在。 在 z/OS 上,需要毫秒级精度时间戳的应用程序应实现替代的计时机制。
JAXP 实体大小限制已降低
从 Java 24 开始,JAXP 的安全限制已有所降低(例如,从 50, jdk.xml.totalEntitySizeLimit 000,000 降至 100,000),这可能会导致处理大型 XML 文档的应用程序出现 XML 处理错误。 有关这些更改及缓解方案的更多信息,请参阅《 从早期版本迁移》。

以前的发行版中存在的问题和限制仍适用

“健康中心”工具中的“原生内存视图”功能无法正常工作

表格中的该 Total Physical MemoryNative memory table 字段为空。 该字段的数据来源于从 API 获取的信息 getTotalPhysicalMemorySize,而该 API 已弃用。 由于无法读取物理内存数据,系统会每隔 5 秒(内存读取 stdout 间隔)向标准输出流写入一条 com.ibm.lang.management.OperatingSystemMXBean.getTotalPhysicalMemory() 异常消息。 该问题正在处理中,并将在 Java 21 的未来版本中修复。 在此之前,作为临时解决方案,请将 JVM 选项 -Dcom.ibm.diagnostics.healthcenter.data.memory 设置为 off,这将禁用健康中心中与内存相关的数据收集功能。

Java 21 keytool 相关问题
使用该工具时,建议配合 -file 选项 zseckeytool -exportcert及文件名一起使用。 这有助于确保导出的证书未添加标签,且采用 DER 编码。 为了保持 DER 编码,必须确保文件不带标签,并避免无意中将其转换为其他格式。

如果您更倾向于使用 PEM 编码,可以将该 -rfc 选项与另一个 -file 选项结合使用。 导出的 PEM 证书采用 ISO8859-1 编码。 要读取该文件,请使用命令 chtag -tc ISO8859-1 对证书进行标记,并设置相应的 z/OS 自动转换环境变量。

对于采用 DER 编码的证书文件,建议使用Java 17版或更早版本的keytool进行打印。 Java 21 存在一个 keytool 已知问题,即某些信息可能无法正确打印。

在打印 PEM 编码的证书文件时,您也可以使用该 OpenSSL 工具来协助操作。

总而言之,在使用该 zseckeytool -exportcert 工具时,请注意编码和标记选项,以确保证书的打印准确且一致。

使用外部函数和内存 API 的应用程序的限制

当从外部函数调用的 Java 代码遇到异常时,应用程序可能会意外退出。

不支持 java.awt.Robot 该类
该类在 java.awt.Robotz/OS 系统上不被支持。 在 z/OS 系统上,使用Robot类的Java程序可能无法正常运行。
jlink 该工具试图为 设置 APF 授权属性, libj9ifa29.so 以满足 zIIP 的资格要求
当您使用该 jlink 工具创建本机运行时映像时,该工具会尝试为该库设置 APF 授权属性,以确保 Java 应用程序仍符合由 libj9ifa29.soIBM System z 集成信息处理器 ( zIIP ) 进行处理的条件。 如果您无权执行 APF 操作,系统将显示一条警告信息:
Warning: APF authorization failed for lib/default/libj9ifa29.so
有关设置 APF-authorized 属性所需权限的信息,请参阅您所用版本的 z/OS 的文档。 例如, 控制谁可以设置 APF 授权属性
类路径长度限制

如果类路径字符数超过 2031 个,shell 会将类路径截取为 2031 个字符。 如果需要长度超过 2031 个字符的类路径,请使用选项文件。 有关详细信息,请参阅 《java 命令》 中的 @argfile。

使用 `stout` 或 `stderr` 写入的消息在使用 `redirect freopen() ` 时可能不会被重定向
如果 Java™ 应用程序使用 C/C++ 函数 freopen() 将 或 stderr 流从一种类型的 stdout 文件重定向到另一种类型的文件,则 JVM 写入 stdout 或 的消息 stderr 可能不会被重定向到新文件。 要解决此问题,请在启动 trueJVM 时将 com.ibm.writeToStandardOutputsUsingStreams 系统属性设置为。 此属性指定输出将通过文件流进行写入,该文件流支持在 MVS 数据集与Unified Storage Server (USS) Z文件系统( zFS )文件之间进行数据重定向。
注意: 此设置还会将默认缓冲行为从 no buffering 更改为 line buffering,因此输出可能不会立即显示。 为解决此问题,请在调用 函数 freopen() 后,使用 或 setvbuf() setbuf() 函数禁用缓冲。

其他问题

如果您遇到无法解决的问题,请参阅《 Java SDK 故障排除指南 》,其中提供了相关建议以及关于如何提交问题的信息。