【问题标题】:Releasing HashMap key-value with null value for memory optimization释放具有空值的HashMap键值以进行内存优化
【发布时间】:2021-01-25 00:34:46
【问题描述】:

如果我在 Java 中为 HashMap 键设置 null 值,即使 HashMap 引用仍然存在,GC 是否会释放与内存相关的值?

更新

使用hmTest.remove(sKey);

对我来说是更好的解决方案,因为它释放了足够的内存,甚至使用了更多的 CPU。

【问题讨论】:

  • 是的,但最好只使用remove() 键,这样键都可以被垃圾回收,而不仅仅是值。跨度>
  • 谢谢@Andreas!使用remove() 内存堆得到了释放!

标签: java hashmap garbage-collection


【解决方案1】:

在我看来你的问题是,如果你这样做:

HashMap<.....> map = ....
map.put(null, new Object())

并且GC 运行并且 map 还活着:这是否意味着映射:null = new Object() 现在有资格进行垃圾收集?如果是这样,答案是否定的。该映射null = new Object() 存储在HashMap 内的所谓Node 中,并且对HashMap 实例本身具有强引用。

Map 是强可访问的时,开发人员发现他们的null 键和new Object() 值消失了,这将是相当令人惊讶的;没有人明确调用remove

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 2020-05-11
    • 2012-05-17
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多