今天看了一个指令重排的视频,说Java对象创建的过程中执行了3步。
- 开辟空间
- 初始化
- 赋值引用
初始化和赋值引用是有可能被指令重排的,所以产生了疑惑,初始化和赋值引用不是一个东西吗?
接下来,我在网上遍历文章寻找Java对象创建时候的过程以用来解答心中的疑惑。
以下是我暂时理解的东西:
关于Java对象创建时的步骤其实聚焦于new这个关键字,举例说明:
Person a = new Person();
- a可以理解为一个句柄,不能称之为对象。
- Person为类声明。
- Person()为构造方法。
所以我们将关键点放在new上,那么new做了些什么呢?
- new首先到堆内存开辟了一个空间
- new调用Person()构造方法
- new返回空间地址并赋值给句柄a
这么一来关于Java对象创建时可能的指令重排,便有了一个新的理解,正因为new调用Person()构造方法和将内存地址赋值给句柄a没有任何关联,所以才会有可能发生指令重排。