2013-04-04 125 views
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); 

这样就够了还是我完全错了?

回答

7

那么如果什么也没有其他有一个对地图的引用,那么是的,这就够了(假设你的地图接受空值)。

但请记住,如果complex所指的对象符合垃圾回收的条件,那么您根本无需执行任何操作。只有在您需要清除部分地图时才需要执行此操作。根据我的经验,为了垃圾收集器的缘故,你必须做任何事情什么比较罕见。

个人而言,我会用Map.remove,而不是你所建议的代码,但:

complex.remove("SOME_KEY"); 

你不是真的用null值的条目,我认为......你只是想摆脱完全的条目,对吗?

+0

我希望数据结构最终清除它的内存,所以删除顶部引用键就足够了。 – 2013-04-04 15:20:59

+0

@ code-gijoe:但是'复杂'本身将有资格进行垃圾回收?如果是这样,你不需要删除它的每一个位。 – 2013-04-04 15:22:04

+0

我是一个单身人员(不幸)在服务器启动时运行,这就是为什么我需要知道内存将被释放。 – 2013-04-04 15:23:06

4

使用complex.remove("SOME_KEY")如果删除的值或该移除的地图中的任何对象未被任何代码引用,则可以。

4

要从地图上删除钥匙,请使用complex.remove("SOME_KEY")。这将使相应的值有资格进行垃圾回收,只要没有剩余的实时引用即可

相关问题