对象的实例化、内存布局与访问定位

对象的实例化

对象的实例化、内存布局与访问定位

对于上图中“创建对象的步骤”详细的解释

1、判断对象的类是否加载,链接,初始化
对象的实例化、内存布局与访问定位


2、为对象分配内存:
对象的实例化、内存布局与访问定位
如果内存规整:指针碰撞
对象的实例化、内存布局与访问定位
对象的实例化、内存布局与访问定位

如果不规整:空闲列表
对象的实例化、内存布局与访问定位
说明
对象的实例化、内存布局与访问定位


5、设置对象的对象头
对象的实例化、内存布局与访问定位


6、执行init方法进行初始化
对象的实例化、内存布局与访问定位

对象的内存布局

对象的实例化、内存布局与访问定位
对象的实例化、内存布局与访问定位

对象的访问定位

对象的实例化、内存布局与访问定位

JVM是如何通过栈帧中的对象引用访问到其内部的对象实例的

1、句柄访问:

优点
对象的实例化、内存布局与访问定位

对象的实例化、内存布局与访问定位

2、直接访问(Hotspot默认)
对象的实例化、内存布局与访问定位