0

我有一个相当复杂的数据结构,它是在其他地图中堆叠地图结构:

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);

这足够还是我完全错了?

4

3 回答 3

7

好吧,如果没有其他东西可以引用地图,那么是的,这就足够了(假设您的地图接受空值)。

但请记住,如果complex引用的对象符合垃圾回收条件,那么您根本不需要做任何事情。只有当您需要清除地图的一部分时,您才需要执行此操作。根据我的经验,你必须为垃圾收集器做任何事情是相对罕见的。

我个人会使用Map.remove而不是您建议的代码:

complex.remove("SOME_KEY");

我假设您并不真正想要具有空值的条目......您只想完全摆脱该条目,对吗?

于 2013-04-04T15:18:58.837 回答
4

complex.remove("SOME_KEY")如果您的任何代码都没有引用已删除的值或该已删除映射中的任何对象,则使用是可以的。

于 2013-04-04T15:19:11.243 回答
4

要从地图中删除键,请使用complex.remove("SOME_KEY"). 这将使相应的值符合垃圾回收的条件,前提是没有剩余的对它的实时引用

于 2013-04-04T15:19:18.413 回答