Ale*_*nov 8 java weak-references weakhashmap
我需要将一些数据与密钥关联起来,因此我使用的是WeakHashMap.但是,另外我需要通过其相应的值获取密钥.简单的方法是在创建值时保持引用:
public class Key {}
public class Value {
final public Key key;
public Value(Key k) {
key = k;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,当我Value在我的程序中使用时,它key不会消失.但是,如果在地图外没有对任何一个键或其值的引用,它是否会被垃圾收集?或者价值中幸存的强大参考是否会阻止它?
lag*_*lle 14
不,它不会被垃圾收集,请参阅Javadoc:
实现说明:WeakHashMap中的值对象由普通的强引用保存.因此,应该注意确保值对象不直接或间接地强烈引用它们自己的密钥,因为这将防止密钥被丢弃.
正如@biziclop所提到的,一种解决方案是在值对象中存储对密钥的弱引用.
public class Value {
final public WeakReference<Key> key;
public Value(Key k) {
this.key = new WeakReference<Key>(k);
}
}
Run Code Online (Sandbox Code Playgroud)