Chr*_*ris 8 java collections performance hashtable hashmap
我目前正在研究编程相关的问题,我试图制作一个庞大的数据散列图.数据的关键是CharSequence的自定义低内存实现,它实现hashCode()和equals(...),值为是Integer对象.
这个散列表中可能有数百万个条目,我通过将Integer作为文件中的指针指向我希望散列的数据,从而大大减少了值的内存使用,但问题是密钥可能是几十个字节(平均25个字节)并且密钥需要在HashMap的默认实现中保存在内存中.
我需要一个内存开销较低的hashmap,它可以将密钥分页到磁盘,或者存储密钥的散列表示.如果密钥本身是哈希,那么我会担心哈希冲突.
理想情况下,我希望能够在每50MB堆空间中存储一百万个条目(密钥中的一个字节数组为25个字节,值部分中为Integer对象).
有没有人对低内存文件系统支持的地图有任何经验,这些地图经过优化可以减少密钥的占用空间?
谢谢,
克里斯
您可以使用 Java 的哈希映射并编写一个 FileKey 类,该类采用 RandomAccessFile、偏移量和长度,在构造时预先计算哈希,并通过从文件中读取数据来实现 Comparable 以便进行比较。
与简单的 MRU 缓存结合使用,您可以使用另一个哈希图在内存中保留一定数量的键,该哈希图以相同的键为键,但它使用自定义比较器,仅比较偏移量和长度值(而不是文件数据)。