java对象大小计算方法及内存布局
1 对象的内存布局
java对象在内存中主要是有:对象头、对象体、padding 3部分组成
1.1 对象头
Mark Word
用于存储对象的运行时信息。如哈希码、GC分代年龄、锁状态、偏向线程ID、偏向时间戳等。
字段长度。32 位机: 32位; 64位机:64位
Klass Pointer
指向对象对应的Class对象的内存地址
字段长度。32 位机: 32位; 64位机:64位,8字节,如果启用指针压缩则为4字节。
数组对象长度
如果对象是数组,需要保存数组长度的字段。字段长度:4字节
1.2 对象体
对象体中包含各类数据类型。数据类型分为基本数据类型、引用数据类型
- 基本数据类型长度
类型 | 大小(Bytes) |
---|---|
boolean | 1 |
byte | 1 |
short | 2 |
char | 2 |
int | 4 |
float | 4 |
long | 8 |
double | 8 |
- 引用数据类型
字段长度:32 位机中占 4字节, 64位机中占 8字节。
1.3 Padding
由于hotspot虚拟机的自动内存管理系统要求对象起始地址必须是 8 字节的整数倍,因此任何对象大小必须是 8字节的整数倍。
参考文献
学习过程中,难免出错。如果您在阅读过程中遇到不太明白,或者有疑问。欢迎指正...联系邮箱crazyCodeLove@163.com
如果觉得有用,想赞助一下请移步赞助页面:赞助一下
分类:
java web 基础知识
标签:
java对象大小计算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)