java对象初始化
1818 2021-10-12 10:56
1.对象new的过程中有一个半初始化状态,首先在堆里new一个对象的分配空间,此时对象中的属性基本数据类型引用类型都是默认值(此时就是半初始化状态)。——默认值
2.然后特殊调用(汇编码)invokespecial ** <T.<init>>class的构造函数/构造方法之后,再初始化成员变量,按照给定的代码赋值。——初始值
3.然后astore_1建立变量和对象之间的关联——关联
以上三步在线程中可指令重排
单例模式懒汉(更适合java)的创建过程中,上锁过程也会出现有别的线程判断静态属性INSTANCE是否为空。所以加锁之后还要二次检查是否为空
compare and swap的基础是副本读写,自旋锁、乐观锁,等着验证自己不断的写入,总有成功的一天
java程序员需要掌握的系统底层
全部评论