当HashMap.remove(Key)时GC如何工作

时间:2015-05-18 23:28:48

标签: garbage-collection

我有一张地图

Map<OuterKey,Map<InnerKey,Object>> sampleMap

关于此我做sampleMap.remove(OuterKey)

现在这对内部地图意味着什么?它会在下一个循环中被垃圾收集吗?

你们推荐我做什么

Map<InnerKey,Object> innerMap = sampleMap.remove(OuterKey);
innerMap.clear();

从GC的角度来看,这有用吗?

由于

2 个答案:

答案 0 :(得分:1)

GC只关心对象的引用,清除内部地图不会帮助GC。

在您的示例sampleMap中唯一引用了innerMap,因此当您从sampleMap中删除条目时,您的innerMap将没有其他引用(在您的本地变量之后{ {1}}超出范围),因此你有innerMap innerMap。

GC会将您的innerMap标记为有资格进行最终化,如果终结器已编码,则会运行。之后,您可以考虑对象GC&#39; d。

当然GC何时运行?这不是你可以在蛮力之外预测的东西(通过dereferenced),这应该只在罕见/独特的情况下完成。

答案 1 :(得分:1)

当没有对该对象的更多引用时,它将被标记为垃圾收集,然后是gc的责任。它不保证自动运行。因此清除它无法实现任何目标。

这有两个原因。

  1. 调用clear会为您留下空白地图。空地图与没有引用它的地图不同。
  2. 当您调用remove时,实际上会为其创建另一个引用(innerMap)。如果有什么东西阻碍了gc,直到你摆脱那个。