415天前,我以为这是编程玄学... (中)

简介: 415天前,我以为这是编程玄学... (中)

stackoverflow


经过前面的分析,留言中提到的结论是验证不下去了。

但是我已经可以非常明确的知道,肯定是 final 关键字在作怪。

于是,我准备去 stackoverflow 上找一圈,看看会不会有意外发现。

果然,皇天不负有心人,我大概翻了几百个帖子,就在准备放弃的边缘,我翻到了一个让我虎躯一震的帖子。

虎躯一震之后,又是倒吸一口凉气:我的个娘,这是 JVM 的一个 BUG!?

这事先按下不表,我先说说我是怎么在 stackoverflow 里面搜索问题的。

首先,当前的这个情况下,我能确定的关键字就是 Java,final 这两个。

但是我拿着这两个关键字去查的时候,查询出来的结果太多了,翻了几个之后我就发现这无疑是大海捞针。

image.png

于是我改变了策略,stackoverflow 上搜索是有 tag 即标签功能的:


image.png

如果让我把这个问题划分一个标签,标签无非就是 Java,JVM,JMM,JIT

于是,我在 java-memory-model 即 JMM 下挖到了一个宝藏:

image.png

就是这个宝藏问题,推动了接下来的剧情发展:

https://stackoverflow.com/questions/57427531/in-java-what-operations-are-involved-in-the-final-field-assignment-in-the-cons


image.png


我知道你看到这里的时候内心毫无波澜,听到我虎躯一震,甚至还想笑。

但是我看到这个问题的时候,不夸张的说:手都在抖。

因为我知道,在这里,就能解决这个玄学问题了。

而我倒吸一口凉气的原因是:这个问题里面的示例代码竟然和我的代码如出一辙,他代码里面的 Simple 就是对应着我代码里面的 Why。想要验证的问题,那就更是一模一样了。

问题里面的描述是这样说的:

Actually, I know the storing "final" field would not emit any assembly instructions on x86 platform. But why this situation came out? Are there some particular operations I don't know ?

实际上,我知道“final”字段不会在 x86 处理器上发出任何汇编指令。但为什么会出现这种情况?有什么特别的操作我不知道吗?



真相


上面提到的 stackoverflow 问题下面有这样的一个回答,这里面就是玄学背后的科学:

image.png

我翻译一下给你看:

老哥,我看到你问题里面的截图了,你查问题的姿势没对。

截图是什么呢?

就是提问者附在问题里面的两个截图:

image.png

其中 final case 的截图是这样的:

image.png

目录
相关文章
|
7月前
|
存储 数据安全/隐私保护 C++
【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
|
存储 JavaScript 前端开发
前端阿瓜每周速记(2020 第 34 周)
毕竟不是全职写文,工作生活之余,遇到自己想写的,又不想随便水一水、或只做一个搬运工,往往需要查阅大量相关知识来吸收、总结、抽离、创新,时间上太紧,难成好作。
|
搜索推荐 小程序 Java
414天前,我以为这是编程玄学... (上)
414天前,我以为这是编程玄学... (上)
141 0
414天前,我以为这是编程玄学... (上)
|
Java 编译器
416天前,我以为这是编程玄学... (下)
416天前,我以为这是编程玄学... (下)
181 0
416天前,我以为这是编程玄学... (下)
|
并行计算 Ubuntu PyTorch
一小时肝一份文档,宠你我们是认真的
时间回到 2 月 25 日下午 6 点,我们的 Z 同学在模型部署后,推理图像的时候,输入图像预处理时间远远超出预期,竟然达到了 2 秒!Z 同学又是改函数又是 debug,还是一头雾水。可 Z 同学锲而不舍,继续钻研,最后推理成功了,但是奈何遇到了推理性能低、速度慢的问题。几经辗转,还是不得解决……
347 0
一小时肝一份文档,宠你我们是认真的
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(四)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(四)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(八)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(八)
|
索引 Python
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(二)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(二)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(三)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(三)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(七)
别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(七)