java - 推荐用于 Java 实现的低内存 HashMap

标签 java performance collections hashtable hashmap

我目前正在处理一个与编程相关的问题,我试图在其中制作大量数据的散列图。数据的键是 CharSequence 的自定义低内存实现,它实现了 hashCode() 和 equals(...),值是 Integer 对象。

这个哈希表中可能有数百万个条目,我设法通过让 Integer 成为文件中指向我希望散列的数据的指针来大幅减少该值的内存使用,但问题是 key 可能是十个字节数(平均 25 字节),并且在 HashMap 的默认实现中,键需要保存在内存中。

我需要一个内存开销低的 HashMap ,它可以将键分页到磁盘或存储键的哈希表示。如果 key 本身经过哈希处理,那么我会担心哈希冲突。

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

有没有人使用过为减少键占用空间而优化的低内存文件系统支持的 map ?

谢谢,

克里斯

最佳答案

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

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

关于java - 推荐用于 Java 实现的低内存 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384963/

相关文章:

java - 需要帮助理解集合在 lambda 语句中的使用

Java Reflect API - isAssignableFrom、扩展/实现

performance - 编程语言的速度是否取决于编译器?

c# - 在不知道泛型类型的情况下将对象添加到集合中

c++ - 在 C++ 中设置变量值之前检查变量是否更好?

VS 上的 sql INNER JOIN 表变量。内部连接(选择)开启

java - Collection.Max 的打印输出

java - Eclipse Java 版本错误

java - Thymeleaf 包含带有自己的 Controller 的模板

javax @notnull 不工作