只需一步,快速开始
主题 961|帖子 961|积分 2893
小伙伴:Effective JAVA 里的并发章节里,有一段关于可见性的描述。下面这段代码会出现死循环,这个我能理解,JMM 内存模型嘛,JMM 不保证 stopRequested 的修改能被及时的观测到。
但奇怪的是在我加了一行打印之后,就不会出现死循环了!难道我一行 println 能比 volatile 还好使啊?这俩也没关系啊
我:小伙子八股文背的挺熟啊,JMM 张口就来。
我:这个……其实是 JIT 干的好事,导致你的循环无法退出。JMM 只是一个逻辑上的内存模型规范,JIT可以根据JMM的规范来进行优化。
比如你第一个例子里,你用-Xint禁用 JIT,就可以退出死循环了,不信你试试?
小伙伴:WK,真的可以,加上 -Xint 循环就退出了,好神奇!JIT 是个啥啊?还能有这种功效?
我:“这下明白了吧,这都是 JIT 干的好事,你要是禁用 JIT 就没这问题了”
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
宁睿