public static void main(String[] args) { Person obj = new Person(); } public class Person { private int age=8; private String name="fu"; }对应的 JVM 指令:
0 new #2 <learnJava/AQS/Person> 3 dup 4 invokespecial #3 <learnJava/AQS/Person.<init>> 7 astore_1 8 return对应指令含义:
private volatile static Singleton05 singleton05; // 堆代码 duidaima.com //double check 性能最好 public static Singleton05 getInstance() { if (singleton05 == null) { synchronized(Singleton05.class) { if (singleton05 == null) { singleton05 = new Singleton05(); } } } return singleton05; }在诸多的单例模式中, double check lock 是性能和简单的方式之一,在上面对象的定义中,使用了 volatitle 的关键字描述,如果此时我们没有使用 volatitlte 关键字会怎样?
2.锁定 CPU 和内存空间总线,让每一个线程的数据保持最新。
16 00000000 00001000 32 00000000 00010000 64 00000000 00100000可以转为:
//舍弃 3 个 0 16 00000000 00001 000 32 00000000 00010 000 64 00000000 00100 000
2.类指针和对象指针的寻址范围一般不会超过 4 字节,2^32*8 =32G(一旦超过这个值,则压缩失效)
2.不产生逃逸:不会被其他方法引用
如果不大,会进入 edian 区,符合线程 ==本地分配== (进入线程独有的 buffer TLAB,不存在锁竞争,效率比较高),进入线程本地分配,不满足进入 edian 区。