对象实例化
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2dfa02f403f4902a07af9e10f461e74.png)
创建对象的步骤:
- 加载类元信息
- 为对象分配内存
- 处理并发问题
- 属性的默认初始化(零值初始化)
- 设置对象头信息
- 属性的显示初始化、代码块中初始化、构造器中初始化
![在这里插入图片描述](https://img-blog.csdnimg.cn/e6bbdc8c33eb468a998c97bcf1f3ab6f.png)
对象的内存布局
![在这里插入图片描述](https://img-blog.csdnimg.cn/49e84726b5e94263830d3639d8727d96.png)
注:常考对象头
![在这里插入图片描述](https://img-blog.csdnimg.cn/e0c3ed82ed02442f9efa2abb7a4c5434.png)
对象的访问定位
JVM怎么通过栈帧中的对象引用访问其它内部对象实例?
![在这里插入图片描述](https://img-blog.csdnimg.cn/827b9dd9c63b4552b038124924def131.png#pic_center)
句柄访问
通过栈帧中的对象引用(reference)指向堆中句柄池,句柄池中含两个指针分别指向堆中的对象实体数据和方法区中的对象类型数据。
缺点:需要开辟内存空间给句柄、多一个访问数据环节,速度较慢。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f4a2c8cf8f4a4141ada8f632ebd81ce5.png)
直接指针(hotspot)
栈中对象引用指向堆中对象实体数据,堆中对象实体数据含有指向方法区中对象类型数据的指针。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ae408852f194f3cab34db8e04d7cbb5.png)