闽公网安备 35020302035485号
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 区。