原文地址:
https://blogs.oracle.com/java/post/java-on-macos-14-4译文:
由 macOS 14.4 引入的一个问题,导致 Java 进程意外终止,这影响了从 Java 8 到 JDK 22 早期访问版本的所有 Java 版本。没有可用的解决方法,由于没有简单的方法可以回退 macOS 更新,受影响的用户可能无法返回到稳定配置,除非他们在操作系统更新前有完整的系统备份。
这个问题在 macOS 14.4 的早期访问版本中不存在,因此只有在苹果发布更新后才被发现。
苹果硅片处理器( M1 、M2 和 M3 )上的 macOS 包括一个功能,控制动态生成的代码如何以及何时可以在每个线程的基础上被生产(写入)或执行。
作为即时编译和执行周期的正常部分,运行在 macOS 上的进程可能会访问受保护的内存区域。在 macOS 14.4 更新之前,在某些情况下,macOS 内核会通过发送信号 SIGBUS 或 SIGSEGV 给进程来响应这些受保护的内存访问。然后,进程可以选择处理信号并继续执行。使用 macOS 14.4 ,当一个线程在写模式操作时,如果尝试访问受保护的内存区域,macOS 将发送信号 SIGKILL 代替。该信号不能被进程处理,进程将无条件终止。
Java 虚拟机动态生成代码,并利用受保护的内存访问信号机制,既为正确性(例如,处理内存映射文件的截断)也为性能。有了 macOS 14.4 ,尝试此操作的程序现在将终止,而不是有机会处理信号。
使用 GraalVM Native Image 创建的提前编译的应用程序不应受影响,但构建新映像的能力可能会受到影响。
甲骨文已经通知其客户、苹果以及我们在 OpenJDK 中的合作伙伴这一情况。我们建议在此问题解决之前,使用基于 ARM 的苹果设备上运行 macOS 14 的 Java 用户延迟应用更新。
此问题可以在
bugs.java.com 上用 bugID JDK-8327860 跟踪。
https://bugs.java.com/bugdatabase/view_bug?bug_id=8327860
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/1024594
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.