深入理解JAVA虚拟机(三)

JAVA对象内存结构分析

java对象主要由如下三部分构成:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。其中对象头分为两部分:一部分存储运行时的数据(Mark Word)、另一部分指向所属类型的元数据的指针。

在32位系统中,Mark Word通常是32bit,类型指针32bit,加起来64bit。

|---------|-----------|------------|----------|-----------|----------|
| 锁状态 | 25bit || 4bit | 1bit | 2bit |
| 锁状态 | 23bit | 2bit | 4bit | 是否偏向锁 | 锁标志位 |
| 无锁态 | 对象哈希码hashCode || 分代年龄 | 0 | 01 |
| 可偏向 | 偏向线程ID | 偏向时间戳Epoch | 分代年龄 | 1 | 01 |
| 轻量级锁定 | 指向锁记录的指针 |||| 00 |
| 重量级锁定 | 指向重量级锁的指针 |||| 10 |
| GC标记 | 空,不需要记录信息 |||| 11 |

重点介绍一下:Mark Word的构成。用于存储哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。

锁的流转原理,请阅读另外一篇:深入理解JAVA虚拟机(四)-CSDN博客

相关推荐
再玩一会儿看代码6 分钟前
Ken的Java学习之路——Java中关于面向对象
java·开发语言·经验分享·python·学习
迦蓝叶9 分钟前
通过 HelloWorld 深入剖析 JVM 启动过程
java·开发语言·jvm·aot·启动过程·helloword·leyden
q***318917 分钟前
深入解析Spring Boot中的@ConfigurationProperties注解
java·spring boot·后端
m0_5656111320 分钟前
Java Stream流操作全解析
java·开发语言·算法
_OP_CHEN31 分钟前
从零开始的Qt开发指南:(三)信号与槽的概念与使用
开发语言·c++·qt·前端开发·qt creator·信号与槽·gui开发
xiezhr40 分钟前
接口开发,咱得整得“优雅”点
java·api·代码规范
bagadesu1 小时前
IDEA + Spring Boot 的三种热加载方案
java·后端
二进制person2 小时前
JavaEE初阶 --文件操作和IO
java·java-ee
@老蝴2 小时前
Java EE - 线程安全的产生及解决方法
java·开发语言·java-ee