场景:现在需要从三方同步组织信息到我方的平台,准备在内存中构建这颗组织树,使用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的实现方式等因素而有所不同。
好的,以上就是这次内存大小估算的分享,如果你觉得对你有帮助,同学能动动小手指,帮我点个赞。