java对象初始化

1818 2021-10-12 10:56

1.对象new的过程中有一个半初始化状态,首先在堆里new一个对象的分配空间,此时对象中的属性基本数据类型引用类型都是默认值(此时就是半初始化状态)。——默认值
2.然后特殊调用(汇编码)invokespecial ** <T.<init>>class的构造函数/构造方法之后,再初始化成员变量,按照给定的代码赋值。——初始值
3.然后astore_1建立变量和对象之间的关联——关联

以上三步在线程中可指令重排

单例模式懒汉(更适合java)的创建过程中,上锁过程也会出现有别的线程判断静态属性INSTANCE是否为空。所以加锁之后还要二次检查是否为空


compare and swap的基础是副本读写,自旋锁、乐观锁,等着验证自己不断的写入,总有成功的一天

java程序员需要掌握的系统底层

全部评论

·