gpt4 book ai didi

java - 为什么 hashmap Clear() 比指针重新分配释放更多的内存

转载 作者:行者123 更新时间:2023-11-30 04:18:57 26 4
gpt4 key购买 nike

我有一张新旧 map ,其中包含数十万个条目:

Map<State, CostAndIndex> oldMap = new LinkedHashMap<State, CostAndIndex>();
Map<State, CostAndIndex> newMap = new LinkedHashMap<State, CostAndIndex>();

在循环的每次迭代结束时,我只是这样做:

oldMap = newMap;

采用这种方法,一段时间后我的内存就耗尽了,即使在调用 System.gc(); 时也是如此。重新分配后。

然后我在重新分配之前添加了一个清除,并且我不再耗尽内存。

oldMap.clear();
oldMap = newMap;

我的问题:为什么它会改变什么?指针重新分配不是告诉 Java 不再需要映射及其内容,并且它可以清除数据并为任何目的重用空间吗?

注意:这正在运行 Java HotSpot 1.7。在 Java HotSpot 1.6 中,我使用第一种方法更快地耗尽内存,但我也不清楚原因。

最佳答案

你是对的,它在内存方面不应该有任何区别 - 你必须有另一个对 oldMap 的引用 float ,以防止它被 GC 处理(如果 object1 和 object2 都指向到 oldMap,并且更新 object1 以指向 newMap,那么 object2 仍将指向 oldMap,这将阻止它被 GC 回收)

关于java - 为什么 hashmap Clear() 比指针重新分配释放更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616687/

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