如何在使用HashMap时最小化垃圾收集<string,list <someobject>&gt; </string,list <someobject>

时间:2014-03-18 10:46:01

标签: java memory-management garbage-collection instantiation garbage

假设我有Map<String,List<SomeObject>> someMap; size()范围从1到100(此size()在程序的持续时间内保持不变,键也保持不变!)。但是,在我的程序中,与键关联的值会不断变化。

目前设置的方式是每次我需要更改someMap的值时(请注意,每当我需要更改与一个键对应的值时,就会发生这种情况我还需要更改与每个键对应的值),我会用new HashMap<String,List<SomeObject>>()覆盖旧地图,然后someMap.put(someString,listOfSomeObjects) 1覆盖100次。< / p>

我想知道如何最大限度地减少此程序产生的垃圾量?我知道我在这里有几个选择;我可以做我目前正在做的事情,或者我可以依赖清晰的功能(在HashMap级别应用并重新put List<SomeObject>个实例进入,或在valueSet()级别申请。

上下文是一个实时系统,可以阻止世界暂停(但我也不想为此购买特殊的JVM)。

1 个答案:

答案 0 :(得分:1)

这里有很多变数,如果没有适当的分析,很难给出明确的答案,但总的来说,我会继续保持原样,因为:

  • 地图及其内容不太可能出自年轻一代,这对GC来说很便宜
  • 复制地图意味着您不需要与引用原始实例的其他线程同步(除非您的行为明确要求)

在分析您的应用时,您应该尝试在年轻一代使用不同的GC算法。我很想看ParNew,虽然它在技术上停止了世界,但它通常很快而且无关紧要。