Java 、Idea、Android Studio 用户请暂缓升级到 macOS 14.4

2024-03-17 09:03:08 +08:00
 codehz
https://blogs.oracle.com/java/post/java-on-macos-14-4
省流:果子改了受保护页面的默认处理方式,之前是发 sigsegv 现在直接 sigkill ,而 java 从很早的版本(已知 8 )开始就在滥用这个特性来将 null 检测改为捕获 sigsegv 信号,包括用户主动写的 if == null 也会在 jit 的帮助下被转换,这在新版本 mac 里会直接触发错误。
建议有 java 需求或依赖基于 java 的 ide 的 mac 用户暂缓升级
17308 次点击
所在节点    Apple
109 条回复
codehz
2024-03-17 09:22:35 +08:00
补充一下,这个需要刚好在 jit 运行的时候(也就是线程正处于 write 的模式)才会触发的 sigkill 其他时候依然是正常流程,因此 grallvm 等直接生成 binary 的不受影响
ly841000
2024-03-17 09:32:53 +08:00
这种关键特性也能改??????
rainbowmolly
2024-03-17 09:43:28 +08:00
“access memory in protected memory regions” 这个行为为什么是“As a normal part of the just-in-time compile and execute cycle” 常规操作?这种即使在果子自己的 oc 中应该是 bad access 直接就 crash 掉吧
meloyang05
2024-03-17 09:55:46 +08:00
实在不理解苹果为什么要在一个小版本更新里进行这么重要的内核更改,完全没有充分的时间来验证更改后所可能引发的一系列后果。这已经是第三个 14.4 更新后所带来的问题了,前两个是显示器 usb 外设失灵,usb 打印机失灵。看得出 14.4 在内核上做了很多改动,然而这些改动没有经过充分测试和验证就能以正式版本推送给用户,实在让人对现在苹果的软件质量不敢恭维
codehz
2024-03-17 10:03:37 +08:00
@rainbowmolly 以前的说法是,通过检测 segsigv 的方式,在 happy path (也就是没异常)的时候性能比较好,甚至于在特定情况(比如 jit 发现某个参数几乎没有 null 过)省略用户主动写的 null 判断更快
Focus9
2024-03-17 10:09:30 +08:00
怪不得 idea 偶尔闪退
meloyang05
2024-03-17 10:15:16 +08:00
感觉像这种程度的内核改动,至少应该放在 macOS 15 这种大版本更新中,来给开发者一些时间解决兼容性问题,而不是像现在这样不声不响地推送到一个小版本中,给用户带来本不必要的困扰
codehz
2024-03-17 10:26:31 +08:00
@meloyang05 我的个人猜测应该是苹果发现了什么影响安全性的严重 bug ,可能是已经有在野利用了
BearCookie
2024-03-17 10:26:40 +08:00
请问有没有办法降级系统额
ysc3839
2024-03-17 10:30:10 +08:00
@codehz 我感觉只是一个信号不至于牵扯到安全漏洞。如果真的无法解决,那也只能说明苹果技术差,隔壁一堆 Unix 都没改呢。
tanrenye
2024-03-17 10:32:06 +08:00
我已经升级了一段时间,还没有发现有什么问题,是不是 zulu 的 sdk 不受影响?
ly841000
2024-03-17 10:32:10 +08:00
@meloyang05 #7 标准的做法应该是在可执行文件里加一个标记, 指明可以支持这个特征, 在新版本编译器中默认启用支持, 只有检测到标记, 系统才启用这个功能
ysc3839
2024-03-17 10:33:18 +08:00
另外我也不觉得这是“滥用这个特性”,这应该就是 SIGSEGV 的正当用法吧?不然为什么要加这个信号?
codehz
2024-03-17 10:35:54 +08:00
@tanrenye 触发条件看脸,得刚好在 jit 的时候触发被 jit 优化的空异常处理代码
EastLord
2024-03-17 10:39:40 +08:00
糟了,出了系统更新 我都是无脑升级
ychost
2024-03-17 10:41:38 +08:00
@meloyang05 #4 ε=(´ο`*)))唉,我现在显示器外设 USB 还是偶发失灵,必须要重新插拔一次
bghtyu
2024-03-17 11:00:35 +08:00
怪不得最近 idea 闪退了几次
owen666
2024-03-17 11:19:35 +08:00
@neochen13 时光机可以降级。
lslqtz
2024-03-17 11:32:35 +08:00
访问受保护的内存区域, 应用可以收到通知, 这意味着可以探测保护的内存区域块?
felixlong
2024-03-17 11:39:07 +08:00
映像里面几乎所有支持 JIT 需要检测空指针/数组越界访问异常的都会利用这个特性啊! NodeJS 没影响嘛? Apple 在搞啥。

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

https://ex.noerr.eu.org/t/1024389

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

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

© 2021 V2EX