gpt4 book ai didi

java - 如果值包含对键的唯一强引用,是否会收集 WeakHashMap 的条目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:57 25 4
gpt4 key购买 nike

我需要在其生命周期内将一些数据与一个键相关联,所以我使用了 WeakHashMap。但是,另外我需要通过其对应的值来获取 key 。最简单的方法是在创建值时保留引用:

public class Key {}

public class Value {
final public Key key;
public Value(Key k) {
key = k;
}
}

当然,当我在我的程序中使用 Value 时,它的 key 不会消失。但是,如果在映射之外不再有对任何一个键或其值的引用,它会被垃圾收集吗?还是值中幸存的强引用阻止了它?

最佳答案

不,它不会被垃圾收集,请参阅 Javadoc :

Implementation note: The value objects in a WeakHashMap are held by ordinary strong references. Thus care should be taken to ensure that value objects do not strongly refer to their own keys, either directly or indirectly, since that will prevent the keys from being discarded.

正如@biziclop 所提到的,一种解决方案是在您的值对象中存储对键的弱引用。

public class Value { 
final public WeakReference<Key> key;
public Value(Key k) {
this.key = new WeakReference<Key>(k);
}
}

关于java - 如果值包含对键的唯一强引用,是否会收集 WeakHashMap 的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051912/

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