类HashMap,但内存减少到原1/6的实现

时间:2021-03-01 11:45:53

java中的Map在提供方便实用的同时,也存在内存浪费巨大的问题。当Map中的Entry数量达到1000万 条以上的时候,需要数G的内存空间 .这里提到的Map使用形式为HashMap<String,Byte>,平均每个key在20个字符左右,最多不超过200字符.

在实际情况下,有差不多5/6的内存浪费 在存放实际数据无关的地方.在一些一次写入多次读去的地方,完全没有必要浪费这么多的资源,下面就通过一个简单的实现说明。

算法说明:

按照key的长度信息将所有的entry放进不同的队列中,为了方便此时的entry队列已经排好序,当然也可以加进内存后再排序.

现在有很多的队列了,在查询的时候根据查询词长度选择一个队列,在队列中通过2分法查找.

算法适用性:

适用于key值集中在一定范围,value为简单类型(byte、int、long、float、double等),数据量在百万条以上,内存匮乏的情况.

 

测试结果:

测试数据为7138595条Entry,分布在250个队列中.

HashMap<String,Byte>的结果:

时间: 3780、3814

内存: 892M

此方法的结果:
时间:5792、5758

内存: 158M