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