调优案例分析六【不恰当数据结构导致内存占用过大】

2021-07-16  本文已影响0人  云芈山人

案例出于《深入理解Java虚拟机》第二版

场景

一个后台RPC服务器,使用64位虚拟机,内存配置-Xms 4G -Xmx 8G -Xmn 1G,使用ParNew+CMS的收集器组合。

问题

分析

解决方案

空间效率
在HashMap<Long,Long>结构中,只有Key和Value所存放的两个长整型数据是有效数据,共16B(2X8B)。这两个长整数数据包装成java.lang.Long对象之后,就分别具有8B的MarkWord、8B的Klass指针,在加8B存储数据的long值。在两个Long对象组成Map.Entry之后,又多了16B的对象头,然后一个8B的next字段和4B的int型的hash字段,为了对齐,还必须添加4B的空白填充,最后还有HashMap中对这个Entry的8B的引用,这样增加两个长整数型数字,实际耗费的内存为(Long(24B)X2)+Entry(32B)+HashMap Ref(8B)=88B,空间效率为16B/88B=18%,实在太低了。

上一篇 下一篇

猜你喜欢

热点阅读