我有一张地图
Map<OuterKey,Map<InnerKey,Object>> sampleMap
关于此我做sampleMap.remove(OuterKey)
现在这对内部地图意味着什么?它会在下一个循环中被垃圾收集吗?
你们推荐我做什么
Map<InnerKey,Object> innerMap = sampleMap.remove(OuterKey);
innerMap.clear();
从GC的角度来看,这有用吗?
由于
答案 0 :(得分:1)
GC只关心对象的引用,清除内部地图不会帮助GC。
在您的示例sampleMap
中唯一引用了innerMap
,因此当您从sampleMap
中删除条目时,您的innerMap将没有其他引用(在您的本地变量之后{ {1}}超出范围),因此你有innerMap
innerMap。
GC会将您的innerMap标记为有资格进行最终化,如果终结器已编码,则会运行。之后,您可以考虑对象GC&#39; d。
当然GC何时运行?这不是你可以在蛮力之外预测的东西(通过dereferenced
),这应该只在罕见/独特的情况下完成。
答案 1 :(得分:1)
当没有对该对象的更多引用时,它将被标记为垃圾收集,然后是gc的责任。它不保证自动运行。因此清除它无法实现任何目标。
这有两个原因。
innerMap
)。如果有什么东西阻碍了gc,直到你摆脱那个。