【发布时间】:2020-09-20 05:02:58
【问题描述】:
我想了解垃圾收集器在什么情况下会通知您清除软引用。文档清楚地表明,当可能发生 OOM 时会发生这种情况,但是如果您完全丢弃引用,GC 会出现并收集 SoftReference 可能会注意到不存在其他强/软引用并清除内部引用值。
ReferenceQueue<Object> cleared = new ReferenceQueue<>();
Object X = new Object();
SoftReference<Object> Xs = new SoftReference<>(X, cleared);
Thread.sleep(10);
X = null;
Xs = null;
System.GC();
Thread.sleep(100);
Reference ref;
while ((ref = cleared.poll()) != null) {
System.err.println(ref);
}
那么关于这个队列的规则记录在哪里?一定有比我要问的更多的极端案例,所以也许这个问题必须扩大一点。
【问题讨论】:
标签: java garbage-collection java-memory-model soft-references