答案是肯定的
要说明具体原因,需要先了解以下几点。
一.对象的创建过程:
以Object的创建作为例子,创建对象一共五个步骤:
- new:分配内存。
- dup:复制一份刚刚创建的内存空间的引用,并压栈。(此时栈中有两个内存空间的引用)。
- invokespecial:取出一个引用,调用init方法,这里就指构造函数,到这一步,完成了对象的new Object()过程。
- astore_1:将栈顶的引用的值赋值给局部变量表角标为1的变量。当前是main方法,局部变量有两个,角标为0的是args,角标为1的是object。这一步是完成对象的初始化。
- return:Return
void
from method。
二.volatile的作用:
- 保证线程的可见性:本质上是使用了CPU的缓存一致性协议。缓存一致性协议有很多,比如MESI、MOSI、MSI等。inter的cpu使用的MESI(M:Modified、E:Exclusive、S:Shared、I:Invalid )。
- 禁止指令重排序:使用了内存屏障。在JVM层,volati