内存优化问题2
我有一个hashmap
key是从key1到key200000,不连续
而每一个key对应的value一个是10万到100万的中随机的30个数字,不重复,
比如这样:
key1:数组[10万,20万....300万]
key2:数组[20万,40万,33万零100 共30个数字]
前提是我现在要查询是通过key来找那个数组
现在的vaule应该是重复存储,有没有办法不怎么降低查询速度的情况下
降低存储需要的空间,请各位支招,谢谢!
[解决办法]
30个数拉出去。key2数组存储30个数中的index。1字节就够了。
[解决办法]
嗯。有点难度,首先你内存的花销为: key number * 30 * sizeof(each value in array)。所以一个有效的办法是观察一下所有的key是不是有规律的,如果有的话,合理的合并key的value。这样使得key number下降。也可以从另外一个方向考虑减少内存,就是对所有的key进行排序,编号。然后将200000*30的数据存到文件里,当输入key值时,将文件中相应的块load到内存里。
[解决办法]
你的hashmap存储的个数可能达到600W,而value用到的个数只有不到100W,所以要降低存储,我觉得就是如何去重的问题。可以尝试把value作为key,key作为value来重新hash。如果反过来hash产生的重复数据比你现在的重复数据还多,那此方法就不可取了。