macOS Sonoma 14.4 可能会让你的机器上的 Java 出问题

Java / macOS 14.4 问题的范围

  • macOS 14.4 改变了受保护内存写入的行为:一些过去会触发 SIGSEGV/SIGBUS 的情况,现在会变成 SIGKILL。
  • HotSpot(以及其他 JVM)在正常的 JIT 和运行时行为中合理地依赖 SIGSEGV(例如隐式空检查、safepoint,可能还有 GC 技巧),因此意外的 SIGKILL 会终止 JVM 进程。
  • 一些评论者指出,这与 POSIX 对段错误的预期相矛盾;另一些人则说,像这样使用信号是长期以来的做法,而且有文档支持,并不“古怪”。
  • 有些用户报告 IDE(JetBrains、Eclipse)和工具会偶尔崩溃;也有人说尽管大量使用 Java,却无法复现这个问题。
  • 影响主要集中在开发者和基于 JVM 的工具上,而不是“普通” Mac 用户,但这仍然影响到很多专业人士。

临时解决方案和缓解措施

  • 建议的 JVM 参数:
    • 禁用或限制信号使用(例如 -Xrs),代价是中断处理和某些运行时功能会变差。
    • 禁用 JIT(-Xint-Djava.compiler=NONE),但会带来很大的性能损失。
  • 在 macOS 上通过 Docker 运行 Java 可能可以避开这个 bug,因为 Docker 使用的是 Linux 虚拟机,但这里被讨论为“可能”或“很可能”,尚未确认。
  • 一些组织已将工作机器上的 macOS 冻结在 14.3;另一些人则强调推迟操作系统更新带来的安全取舍。

Apple 的 QA、发布流程与可回滚性

  • 很多人质疑,为什么这样的内核级变更会在正式版中发布,而在更早的 beta 里却缺失或不同。
  • 对 Apple 的 QA 以及在没有明确协调的情况下对信号行为作出破坏性更改,存在强烈批评。
  • macOS 大版本/小版本升级不可逆是一个重大担忧:如果这类问题破坏了工作流程,用户很难轻松回滚。

macOS 作为开发平台(更广泛的争论)

  • 大量子讨论围绕用于开发的 macOS、Linux 和 Windows 展开:
    • 有人说 macOS 不可靠、对第三方硬件(显示器、音频)不友好、窗口管理糟糕、Docker 摩擦多,而且存在 POSIX “诡异谷”问题。
    • 也有人表示 macOS 非常稳定,硬件出色,终端体验好,日常 UX 很强,比 Windows 和 Linux 都更喜欢它。
  • 投诉还包括 Finder 的用户体验、外接显示器缩放、负载下的音频故障,以及过去十年里 macOS 精致度被认为有所下降。