对象实例化、内存布局与访问定位
2021-09-15 11:07:50 0 举报
AI智能生成
对象实例化、内存布局与访问定位
作者其他创作
大纲/内容
<b><font color="#c41230">对象实例化</font></b>
new
Class的newInstance
Constructor的newInstance
clone
反序列化
第三方库Objensis
<font color="#c41230"><b>实例化的过程</b></font>
检查是否加载、链接、初始化
分配内存空间
连续内存
指针碰撞
不连续内存
虚拟机需要维护一个列表
空闲列表分配
并发性问题
CAS分配失败后加锁机制保证原子性一致
每个线程预分配一个TLAB
初始化分配到的空间
为对象的每个实例属性赋值,保证没有实例属性再不赋值时可直接使用
设置对象的头信息
执行init方法进行初始化
<b><font color="#c41230">内存布局</font></b>
对象头(Header)
运行元数据
哈希值
GC分代年龄
锁状态标志
线程持有的锁
偏向线程ID
偏向时间锁
类型指针
指向类元数据instanceKlass,确定该对象所属的类型。
实例数据(Instance Data)
说明:它是对象真正存储的有效信息,也包括程序代码中定义的各种类型的字段。
规则:
相同宽度的对象总是被分配在一起
父类中定义的变量出现在子类之前
如果CompactField参数为true,子类的窄变量可能插入到父类变量的空隙
对其补充
不是必须的,无特殊意义,仅仅起到占位符的作用。
<b><font color="#c41230">对象的定位访问</font></b>
目的:JVM创建对象的目的就是为了使用它
JVM是如何通过栈帧中的对象引用访问到其内部的实例对象呢
对象访问的方式主要有两种:
句柄访问
直接访问(HotSpot)采用
<b><font color="#c41230">面试题</font></b>
美团 : 对象在VM中是怎么存储的?对象头信息里面有哪些东西?<br>蚂蚁金服 : 二面 : java对象头里有什么<br>
0 条评论
下一页