我有一个包含十万个条目的新旧地图:
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 中,我用第一种方法更快地耗尽了内存,我也不清楚为什么。