gpt4 book ai didi

java - 如何在使用 HashMap> 时最小化垃圾回收

转载 作者:行者123 更新时间:2023-12-01 13:15:52 25 4
gpt4 key购买 nike

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

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

我想知道如何最大限度地减少该程序生成的垃圾量?我知道我在这里有几个选择;我可以做我当前正在做的事情,或者我可以依赖清晰的功能(要么在 HashMap 级别应用,然后将 put 重新设置到其中 List<SomeObject> 实例,要么在 valueSet() 级别应用.

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

最佳答案

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

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

在分析您的应用程序时,您应该尝试在年轻代上使用不同的 GC 算法。我很想看看 ParNew,虽然它在技术上是“停止世界”的,但通常速度太快,以至于无关紧要。

关于java - 如何在使用 HashMap<String,List<SomeObject>> 时最小化垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com