深入理解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博客

相关推荐
蜗牛一步步往上爬2 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
这个昵称不容易3 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长4 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y4 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊5 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼5 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
冻柠檬飞冰走茶7 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
文丑颜不良啊7 小时前
LeetCode2161~2180题目解析
java·leetcode
FRing037 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊7 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法