[实战经验]在Java中如何估算对象集合的内存占用空间

场景:现在需要从三方同步组织信息到我方的平台,准备在内存中构建这颗组织树,使用HashMap存储,那应该怎么取估算这棵树的内存占用大小呢?

思路:总的内存占用大小=每个组织节点的内存占用大小*组织节点个数

组织对象:

// 组织id
private int id;

// 父组织id
private int parentId;

// 组织名称
private String name;

计算每个节点的内存占用大小:

  • id,int类型4个字节
  • parentId,同上4个字节
  • name为字符串类型,我们假设name的长度为20个字符,则name属性56字节
  • 因此,每个节点的内存占用大小约为4(id)+4(parentId)+56(name)+8(对象头)=72字节

String对象在java中为不可变对象,底层实现为char[],其内存占用计算通常为对象头(8字节)+int字段(4字节,记录字符数组长度)+字符数组长度(假设平均为20个字符,一个char是2个字节,所以为40字节)+对其填充(4字节)=56字节

计算整棵树的内存占用大小

  • 节点数5000个
  • HashMap的实现在java中通常有额外的开销,比如存储桶数组,链表或者红黑树等结构的开销。假设HashMap的开销可以忽略不计。

因此,整棵树的内存占用大小约为5000(节点数量)*72(每个节点大小)=360,000Byte,约为360KB(这里我们粗略以1KB=1000B来计算)。

这个内存占用大小对于动辄64G的服务器来说,那就是九千牛一毛啊,所以不用担心。需要注意的是,这只是一个估算值,实际情况可能会因为JVM的内存管理、对象对齐、HashMap的实现方式等因素而有所不同。

好的,以上就是这次内存大小估算的分享,如果你觉得对你有帮助,同学能动动小手指,帮我点个赞。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wpw5499

若有帮助,不妨请博主一杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值