【发布时间】:2017-01-31 23:02:19
【问题描述】:
在下面的 sn-p(其唯一目的是教育测试)中,contains() 始终 ↲ 为真。
Set<String> weakSet = Collections.newSetFromMap(new WeakHashMap<>());
weakSet.add("someKey");
System.gc();
weakSet.contains("someKey");
我希望 JVM 为回收空间所做的 best effort 包括删除只能弱可达的对象(没有任何强引用的弱集合元素)。但我错了。
那么,有没有办法在实践中测试弱引用的自动删除,这样你就可以看到引用消失了?换句话说,如何让contains() 返回 false?
【问题讨论】:
-
sn-p总是返回
true的原因是因为Stringliterals aren't usually garbage collected。
标签: java weak-references