Oracle 官方建议 Mac M 系列芯片的 Java 开发者暂缓升级到 macOS 14.4

279 天前
 LDa
原文地址:
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
2381 次点击
所在节点    程序员
6 条回复
LDa
279 天前
技术债回旋镖了属于是
kita
279 天前
生产(写入)的意思应该是被生成(写入 RAM)
macOS 内核会通过发送信号 SIGBUS 或 SIGSEGV 给进程来响应这些受保护的内存访问:
macOS 内核会给进程发送信号.. 来回应那些写入被保护区段内存的操作

你是不是机翻,意思表达的莫名其妙
LDa
279 天前
@kita 对 chatGPT 翻译的
imPrk
278 天前
正式版我一般都直接更

后端我写 Go PHP 的,基本上不会碰到糟心事
LDa
278 天前
@imPrk 谁能知道整这么一回呢 着实蛋疼了
imPrk
277 天前
@LDa 主要是苹果能如此修改就已经很不可能了,因为动一个很底层的东西你不知道有多少应用会波及到。再加上能造成如此大的影响,两个巧合本身都是小概率事件,同时发生就是大事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1024594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX