当前位置: 欣欣网 > 码农

Java应用崩溃,请不要升级您的 MacOS 版本

2024-03-18码农

SOS

MacOS 14.4 引入的一个问题导致 Java 进程意外终止,导致应用直接崩溃退出。

影响范围
Mac 版本 14.4
机型 M1、M2、M3 (Apple Silicon m* 芯片)
Java 版本 Java8-Java22 All Version

如图14.4已经开启大规模推送

问题描述

苹果在最新的 macOS 14.4 更新中引入了一项重大变更,影响了 Java 依赖动态代码生成和执行的应用程序的运行。以下是该问题的详细说明:

在 macOS 14.4 之前的版本中,如果进程试图访问受保护的内存区域(这是动态生成和执行代码过程的正常情况),内核会发送 SIGBUS 或 SIGSEGV 信号给进程。进程可以选择捕捉并处理这些信号,然后继续执行。

然而,在 macOS 14.4 中,如果线程处于写入模式并试图访问受保护的内存区域,内核将直接发送 SIGKILL 信号,导致进程被强制终止,而无法捕捉和处理该信号。

Java 虚拟机(JVM)等依赖动态代码生成的技术,通常会利用受保护内存访问并捕捉相关信号,用于正确性检查(如处理内存映射文件的截断)和性能优化。在 macOS 14.4 中,这些应用程序将无法正常运行,必须等待相关修复。

由于 macOS 没有提供方便的回滚机制,受影响的用户可能无法轻易返回到之前的稳定配置,除非他们事先对整个系统进行了完整备份。值得注意的是,这个问题仅存在于 macOS 14.4 的正式版本中,在早期访问版本中并未发现。

该变更旨在加强对装载了苹果芯片(M1、M2 和 M3)的 macOS 系统的内存保护,但也带来了对部分应用的破坏性影响。开发人员需要密切关注相关更新,并及时对受影响的应用程序进行适配和修复。