【发布时间】:2011-02-13 21:53:00
【问题描述】:
我正在寻找类似于java.lang.ref.WeakReference 的弱引用实现,但它提供了set() 方法或其他重新引用创建的弱引用对象的方式。示例如下:
MutableWeakReference ref = new MutableWeakReference(someObject);
ref.set(anotherObject);
我需要这个来避免创建对象,在我的情况下,这会使执行时间减慢一个数量级,因为我不断地更改我的弱引用所引用的对象。
我试图从 JDK 复制代码,但似乎不可能,因为 java.lang.ref.Reference 使用内部的 sun.misc.Cleaner 类。我还查看了 Android 实现,但它似乎依赖于 Dalvik VM 进行垃圾收集。我想知道这是否真的可以在不改变 JVM / 环境的情况下实现。
【问题讨论】:
-
如果您经常更改参考,是否可以暂时保留它,如果它老化了再获得一个新的
WeakReference? -
如果 WeakReference 的所指对象是可变的,则可能会出现竞争条件,即您在将 Reference 放入 ReferenceQueue 后对其进行变异。我不认为这是要走的路。
标签: java implementation mutable weak-references