创建为实例变量时,SoftReference
和WeakReference
是否真的有帮助?在方法范围内使用它们是否有任何好处?
另一个重要的部分是ReferenceQueue
。除了能够跟踪确定为垃圾的引用外,Reference.enqueue()
能否用于强制注册对象以进行垃圾收集?
例如,是否值得创建一个方法,将某些占用大量内存资源(由强引用持有)的对象并创建引用以将它们加入队列中?
Object bigObject;
public void dispose() {
ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
WeakReference<Object> ref = new WeakReference<Object>(bigObject, queue);
bigObject = null;
ref.enqueue();
}
(假设这里的Object表示使用了大量内存的对象类型,例如BufferedImage
或其他类似的东西)
这是否有任何实际影响呢?还是这只是代码浪费?