我有一个对其他对象的弱引用的弱引用数组,如下所示:
public class Foo{
WeakReference<WeakReference<Bar>[]> cache;
}
public class Bar{
private final WeakReference<Bar>[] ownerCache;
}
由于我现在不会讨论的原因,数组本身被弱引用。我想确保在任何 Bar 对象可以从它到达之前它不会被垃圾收集。换句话说,只要存在可以从中访问的任何 Bar 对象,它就必须存在于内存中。然后,如果不再存在 Bar 对象,那么最好对数组进行垃圾回收。(Bar 对象可能会或可能不会从其他地方强烈访问。)我通过引用所有 Bar 对象内的字段中的缓存数组来做到这一点。如果该字段足以使数组强可达,则不会被垃圾回收。但是,我的代码从未真正使用过该字段,我无法将其公开。(我收到“未使用”警告。)我担心此类字段的存在在编译时或运行时终止,
这是正确的解决方案吗?无论垃圾收集器或 JVM 实现如何,此解决方案都能实现我想要的吗?如果没有,有什么更好的方法?