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

252 天前
 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 用户暂缓升级
13743 次点击
所在节点    Apple
109 条回复
leonshaw
252 天前
这么说哪天 CPU 也可以不给 page fault 了,直接 halt 麻烦你内核重新适配一下。
Solael
252 天前
呵呵苹果一贯操作,你不像 windows 一样先前兼容也就罢了,测试恐怕也是阿三随便点几下就完事了,连编译程序都不测试是吧。
noahlias
252 天前
还好没更新 14.4
DigitalG
252 天前
看了一下,这个是不影响用户使用 java 程序是吧?只影响做 java 开发的用户,或者开发时用了基于 java 的 IDE 程序?
codehz
252 天前
@DigitalG 只是不影响用 graalvm 这样直接 aot 的,其他 java 程序全都受到影响
OneMan
252 天前
还好不升级
Rorysky
252 天前
@meloyang05 #4 都是访问被保护区域了,java jit 还要依赖这个内核行为,这不是奇技淫巧的优化是什么?
parthenon2007
252 天前
难怪这几天 IDEA 莫名其妙崩了。
Rorysky
252 天前
@meloyang05 #4

苹果开发这个开发文档明确说了,访问受保护区域属于预期外的行为,这能怪谁?
"A crash due to a memory access issue occurs when an app uses memory in **an unexpected way**"

https://developer.apple.com/documentation/xcode/investigating-memory-access-crashes
iseki
252 天前
@Rorysky 一大票设施利用这个段错误和总线错误信号来做兜底呢,这要是可以随便改大家程序都不要写了。好在这次水果只是改了一个特例而已。
预期外的行为,它也是良定义的,看看你引用的这句话的下一句。
iseki
252 天前
注意下 unexpected 不等于 undefined 也不等于 unspecified
felixlong
252 天前
@Rorysky 这也洗,你没看 Oracle 的人说吗,Mac 14.4 最后一个 RC 版本行为都没改,最后正式版本突然改了。这让人家怎么来的及修?
Rorysky
252 天前
@iseki #50 不要随便迁移概念, 你说的良定义猜测就是 well-defined 吧,这是描述语言标准本身的可移植性(或者说语意不依赖于运行环境,只要支持语言标准就能保证一致性输出),这和系统内核行为有什么关系,旧版本的信号量是来提示程序 bad access 的,它不是一个特性,java 不应该利用来实现功能。

普通的程序运行中 bad access ,系统认为进程有问题了,直接杀掉是激进了,但估计是为了安全的原因。

就像人犯罪了,监管机构是口头教育,还是 逮捕教育,还是就地正法,那是监管机构决定的,你不能说我利用这个机会去接受某些信息/更快的见到某些人
Rorysky
252 天前
@felixlong #52 本来就是错误的设计,啥时候都是错误的(我并不知道 jit 怎么利用这个非法行为去加速执行
iseki
252 天前
@Rorysky 信号量怎么就不是一个特性了?这都是写在文档上的,就因为它预期中不常见,所以就不是个特性从而可以随便更改了?既然承诺了它所产生的效果和副作用,怎么就不能用于优化了?实际上因为这个动作的延迟相对较高,JVM 的 JIT 也是用来做非预期分支去优化判定的。
一个东西既然承诺了效果,那就不该去干涉使用者怎么用,除非你有合理的理由,提前注明。
iseki
252 天前
@Rorysky
> Null checks are cheap. They usually fold straight into a related memory access instruction, and use the CPU bus logic to catch nulls. (Deoptimization follows, with regenerated code containing an explicit check.)
iseki
252 天前
@Rorysky 如果利用捕获 sigsegv 去做某些事是错误的,那设计这个信号量又是为了什么?如果你说有些事可以做有些事不能做,那就得讲明白哪些事不能做,有什么合理的理由。
BeiChuanAlex
252 天前
吓死我了,还我写 rust
cubecube
252 天前
only apple can do
felixlong
252 天前
@Rorysky 呵呵,我打赌 Apple 会把这个改回去。你信不信?

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

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

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

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

© 2021 V2EX