对象内存布局和对象头
2023-11-01 14:39:39 0 举报
对象内存布局和对象头
作者其他创作
大纲/内容
存储内容
标志位
状态
对象哈希码、对象分代年龄
01
未锁定
指向锁记录的指针
00
轻量级锁定
指向重量级的锁的指针
10
膨胀(重量级锁定)
空,不需要记录信息
11
GC标记
偏向线程ID、偏向时间戳、对象分代年龄
可偏向
锁状态\\大小
25bit
31bit
1bit
4bit
2bit
cms_free
分代年龄
偏向锁
锁标志位
无锁
unused
hashcode
0
ThreadID(54bit)、Epoch(2bit)
1
person
堆空间
实例数据
对其填充
对象标记Mark Word
操作数栈
main()的栈帧
64位虚拟机
HotSpot虚拟机对象头Mark Word
运行时元数据
对齐填充(padding)
类型指针
方法区
同步锁标记
args
主线程的虚拟机栈
hashcodeGC分代年龄锁状态标志
哈希码(hashcode)
动态链接
附加信息
类元信息(类型指针):存储的是该对象类元数据(klass)的首地址
GC次数
hash:保存对象的哈希码age:保存对象的分代年龄biased_lock:偏向锁标识位lock:锁状态标识位javaThread:保存持有偏向锁的线程IDepoch:保存偏向时间戳
类型指针8字节,对象标记8字节,共计16字节
字符串常量池
对象头(header)
实例数据(Instance Data)
方法返回地址
对象实例
对象内部结构图
父类的实例数据:id:001name:张三sex:男project:new Project()
局部变量表
new Person()实例
....
对象头
person的Klass类元信息
Project的Klass类元信息
在64位系统中,Mark Word占8个字节,类型指针占8个字节,一共16个字节
new Project()实例
偏向锁持有者
在64位虚拟机下,MarkWord是64bit大小,其存储结构如下
0 条评论
下一页