推荐用于Java实现的低内存hashmap

Chr*_*ris 8 java collections performance hashtable hashmap

我目前正在研究编程相关的问题,我试图制作一个庞大的数据散列图.数据的关键是CharSequence的自定义低内存实现,它实现hashCode()和equals(...),值为是Integer对象.

这个散列表中可能有数百万个条目,我通过将Integer作为文件中的指针指向我希望散列的数据,从而大大减少了值的内存使用,但问题是密钥可能是几十个字节(平均25个字节)并且密钥需要在HashMap的默认实现中保存在内存中.

我需要一个内存开销较低的hashmap,它可以将密钥分页到磁盘,或者存储密钥的散列表示.如果密钥本身是哈希,那么我会担心哈希冲突.

理想情况下,我希望能够在每50MB堆空间中存储一百万个条目(密钥中的一个字节数组为25个字节,值部分中为Integer对象).

有没有人对低内存文件系统支持的地图有任何经验,这些地图经过优化可以减少密钥的占用空间?

谢谢,

克里斯

Law*_*Dol 3

您可以使用 Java 的哈希映射并编写一个 FileKey 类,该类采用 RandomAccessFile、偏移量和长度,在构造时预先计算哈希,并通过从文件中读取数据来实现 Comparable 以便进行比较。

与简单的 MRU 缓存结合使用,您可以使用另一个哈希图在内存中保留一定数量的键,该哈希图以相同的键为键,但它使用自定义比较器,仅比较偏移量和长度值(而不是文件数据)。