前言
一个对象占用多少内存。一、java对象占用内存怎么算?
对象头+对象体=对象
二、对象头对象体
1.对象头
对象头
|-标记字 1个机器字
|-Class指针 1个机器字
|-数组长度(int) 数组独有
2.对象体
对象体
|-内部空白
|-实例数据
最后可能还有外部对齐
分析
64位JVM中对象头占用12byte 8+4 所以一个空类实例也要16个字节因为以8字节对齐
使用Integer包装类比原生类型多了三倍的内存消耗 原来就4个字节现在要16个字节
别用多维数组啦
多维数组的坑 数组对象嵌套对象数组会导致额外的内存开销
64位机器上 数组对象的对象头占用24个字节(实际是8+8+4=20 但是20个字节不是8的倍数补齐为24) 启用压缩后占用16个字节
int[128][2]
3600=128*(4*2+12+4)+128*(4)+16
|-128*(4*2+16)//128个int[2] int[2]的大小是4*2+12+4 16字节是对象头
|-128*(4)+16//1个int[128] int[128]的大小是128*(4)+16 16字节是对象头
int[256]
1040=256*4+16
|-256*(4)+16//1个int[256] int[256]的大小是256*(4)+16 16字节是对象头