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

目录
相关文章
|
12月前
将字符串转为时间晚了5天,避坑指南
将字符串转为时间晚了5天,避坑指南
44 1
L2-020 功夫传人 (25 分)
L2-020 功夫传人 (25 分)
81 0
|
存储 算法 测试技术
算法学习 【第一周】Ⅰ
带你进入算法的世界!
99 0
算法学习 【第一周】Ⅰ
|
机器学习/深度学习 算法
算法学习 【第一周】Ⅱ
学习有关算法设计和改进的知识。
117 0
算法学习 【第一周】Ⅱ
|
算法 Python
Python 1185. 一周中的第几天(刷题如风,常伴吾身)
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。
133 0
L1-5 VV的烦恼 (15 分)
VV今天去图书馆学习,发现电脑没充满电,电量只剩下n,而她有m1个低计算量程序需要运行,m2个高计算量程序需要运行 现假设电脑在运行低计算量程序的情况下消耗电量p1每分钟,运行高计算量程序的情况下消耗电量p2每分钟,运行不同程序之间没有时间间隔。 请问VV能把所有程序运行完吗?
108 0
|
搜索推荐 小程序 Java
414天前,我以为这是编程玄学... (上)
414天前,我以为这是编程玄学... (上)
122 0
414天前,我以为这是编程玄学... (上)
|
Java 编译器
416天前,我以为这是编程玄学... (下)
416天前,我以为这是编程玄学... (下)
159 0
416天前,我以为这是编程玄学... (下)
|
人工智能 自然语言处理 前端开发
程序老鸟C#学习:5天学会全部基础--第一天
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
210 0
|
设计模式
《代码大全2》前半部分读书简单记录
平常的项目开发的每一个流程都应该认真对待,认真核对checklist

热门文章

最新文章