java对象的内存大小


前言

一个对象占用多少内存。

一、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字节是对象头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值