为什么hashmap clear()比指针重配更能释放内存?

问题描述 投票:1回答:1

我有一张新旧地图,包含十万条条目。

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

在每次循环结束时,我都是这样做的。

oldMap = newMap;

用这种方法,过了一会儿我就会用完内存, 即使是在重新分配后调用System.gc();。

后来我在重赋前加了一个clear,就不再用完内存了。

oldMap.clear();
oldMap = newMap;

我的问题是 为什么会有什么变化? 指针重配不是告诉Java不再需要这个地图和它的内容,它可以清除数据并重新使用空间做任何用途吗?

注意:这是在运行Java HotSpot 1.7的情况下。 在Java HotSpot 1.6的情况下,我用第一种方法用完内存的速度更快,我也不清楚为什么。

java memory-management garbage-collection
1个回答
2
投票

你是正确的,它不应该在内存方面有任何区别--你必须有另一个引用到 oldMap 漂浮在周围,阻碍了它被GC化(如果object1和object2都指向了 oldMap,然后你更新object1指向 newMap那么,object2仍将指向 oldMap 这将防止它被GC'd)

© www.soinside.com 2019 - 2024. All rights reserved.