gpt4 book ai didi

java - 如何在不阻塞 GC 的情况下将值关联到键

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:07 27 4
gpt4 key购买 nike

我的问题是:如何将一堆值与一堆键相关联

  • 不直接修改 key ,并且
  • 在不阻止键被 GC 的情况下(知道值对键有强引用)

背景:

我需要将一堆复杂对象(称为值)与一些特定对象(称为键)相关联。

通常,我这样做的方式是使用关联键和值的 HashMap 。

这很好用。但是,我还需要确保映射不会干扰 key 的垃圾收集。换句话说,映射的存在不应阻止 key 被垃圾收集。

通常解决这个问题的方法是使用 Wea​​kHashMap,它只保存键的 WeakReferences。但是,WeakHashMaps 只有在映射中的值没有对键的强引用时才有效。不幸的是,我的值都对我的键有很强的引用,这会阻止键被垃圾收集。这也可以通过对值使用弱引用来解决,但这不是一个可行的解决方案,因为我不允许我的值在我的键之前被 GC。只要键对象仍然存在,值也必须存在。

因此,对于这种情况,我的典型解决方案是停止使用 HashMap,而是修改键以对所需的所有值进行强引用。这将确保我仍然可以获得给定键的所有值,但不会阻止键在其自然生命周期完成时获得 GC。

不幸的是,我无法修改键,所以我无法将值直接添加到键中。那么还有哪些巧妙的解决方案呢?

最佳答案

给定约束:

  • 键有某种对值的引用
  • 值对键有强引用
  • 不要阻止 key 被 GC 处理
  • 值不能在键之前被GC
  • 只要值的键存在,该值也必须存在
  • 值和键仍然应该是 GC-able

...我认为这在逻辑上是不可能的。

为什么你不能删除值→键映射(或者至少使用引用不同但逻辑上的 .equal() 对象)然后使用 WeakHashMap 解决方案?

关于java - 如何在不阻塞 GC 的情况下将值关联到键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196502/

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