有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用HashMap<String,List<SomeObject>>

假设我有一个Map<String,List<SomeObject>> someMap;,它的size()范围从1到100(这个size()在程序期间保持不变,键也保持不变!)。然而,在我的程序中,与键相关的值不断变化

目前的设置方式是,每次我需要更改someMap的值(请注意,每当我需要更改一个键对应的值时,碰巧我也需要更改每个键对应的值),我都会用new HashMap<String,List<SomeObject>>()覆盖旧映射,然后someMap.put(someString,listOfSomeObjects){}到100

我想知道如何将该程序产生的垃圾量降至最低?我知道我有几个选择;我可以做我目前正在做的事情,或者我可以依赖clear功能(要么在HashMap级别应用,要么重新putList<SomeObject>实例放入其中,要么在valueSet()级别应用

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


共 (1) 个答案

  1. # 1 楼答案

    这里有很多变量,如果没有适当的分析,很难给出一个明确的答案,但总的来说,我会像你一样继续下去,因为:

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

    在分析应用程序时,你应该尝试对年轻一代使用不同的GC算法。我很想看看ParNew,虽然从技术上来说它可以阻止世界,但通常速度很快,这是无关紧要的