1对象的创建过程
源码:
class T{
int m=9;
}
T t=new T();
T t=new T();的汇编码:
0 new #2 <T> //半初始化 确定具体内存大小 m的值初始为0
3 dup
4 invokespecial #3 <T.<init>> //具体赋值 将m的值 初始为9
7 astore_1 //赋值 将new T()对象赋值给t
8 return
此处如果不加volatile关键字,一行new对象的代码(对应好几行汇编码) 有可能会发生代码重排序(cpu乱序执行)。
这里也是单例模式 为啥单例对象要加volatile关键字的原因:防止一个线程创建对象时,此时对象处于半初始化状态,同时其他线程进入(其他的线程判断时 该对象已经不为null),返回一个半初始化对象。