gpt4 book ai didi

java - java中map中存储大量 'Entry'时如何节省内存?

转载 作者:行者123 更新时间:2023-11-30 02:16:42 25 4
gpt4 key购买 nike

我想在 map 中存储 1*10^8 对象以供搜索。当我的程序启动时,它将读取这些对象并将其存储在 map 中。阅读结束后,这张 map 永远不会更新,util程序已经死了。我不希望jvm放弃它们中的任何一个。我了解到HashMap会浪费很多内存,有没有什么类型的map可以存储这么多对象并节省内存?

而且我知道jvm会扫描这些对象,这浪费时间。如何热衷于此?抱歉,情况是这样的:我正在用 apachestorm 编写一个 Bolt。我想从数据库中读取数据。当bolt处理元组时,我需要使用数据库中的数据进行计算。为了程序的性能,我必须将它们存储在内存中。我知道 jvm 不擅长管理大量内存,所以也许我应该尝试 koloboke?

最佳答案

HashMap需要分配足够大小的数组,以尽量减少散列冲突 - 可能会发生两个或多个不相等的对象具有相同的散列码 - 这种情况的概率取决于散列函数的质量。冲突可以通过线性探测等技术来解决,线性探测将条目存储在下一个未被占用的(hash + i) mod length索引处,二次探测> 存储下一个未被占用的(hash + i^k) mod length 索引处的条目,单独链接 存储每个存储桶中条目的链接列表。通过增加后备数组的长度来降低碰撞概率,从而内存浪费

但是,您可以使用 TreeMap它以树结构存储条目,该结构仅创建等于条目数 i 的节点数。 e. 高效的内存使用

请注意,getputremove 操作的复杂性有所不同。 HashMap复杂度 O(1),而 TreeMap复杂度为O(log n)

假设你想从大小为 100 000 000 的映射中获取一个条目,那么在最坏的情况下(要找到的元素是叶子,即位于树的最后一层),需要沿着树向下传递的路径长度为 log(100 000 000) = 8。

关于java - java中map中存储大量 'Entry'时如何节省内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48168211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com