我有一个相当复杂的数据结构,它将Map结构堆叠在其他地图中:
Map<String, Map<Integer, PerformanceScopeMeta> > complex;
这是PerformanceScopeMeta类:
class PerformanceScopeMeta {
/* Meta information */
private Map<String, String> meta;
private List<PerformanceMessage> messages;
}
这就是我所做的“使内存可用于垃圾收集”:
complex.put("SOME_KEY", null);
这还不够,还是我完全错了?
答案 0 :(得分:7)
如果 else 没有引用地图,那么是的,这就足够了(假设你的地图接受空值)。
但请记住,如果complex
引用的对象符合垃圾回收条件,那么您根本不需要做任何事情。只有当您需要清除部分地图时才需要这样做。根据我的经验,为了垃圾收集器你必须做任何是相对罕见的。
我个人使用Map.remove
代替您建议的代码:
complex.remove("SOME_KEY");
你确实想要一个空值的条目,我假设......你只是想完全摆脱这个条目,对吗?
答案 1 :(得分:4)
如果删除的值或删除的地图中的任何对象未被任何代码引用,则使用complex.remove("SOME_KEY")
即可。
答案 2 :(得分:4)
要从地图中删除密钥,请使用complex.remove("SOME_KEY")
。这将使相应的值符合垃圾回收的条件,只要没有剩余的实时引用。