【发布时间】:2011-03-20 18:30:32
【问题描述】:
有人可以解释三个参考类之间的区别(或发布一个很好的解释的链接)吗? SoftReference > WeakReference > PhantomReference,但我什么时候会使用每一个?为什么有WeakHashMap 而没有SoftHashMap 或PhantomHashMap?
如果我使用以下代码...
WeakReference<String> ref = new WeakReference<String>("Hello!");
if (ref != null) { // ref can get collected at any time...
System.gc(); // Let's assume ref gets collected here.
System.out.println(ref.get()); // Now what?!
}
...会发生什么?我是否必须在每个语句之前检查ref 是否为空(这是错误的,但我应该应该做什么)?抱歉,这些问题很急,但我无法理解这些 Reference 课程...谢谢!
【问题讨论】:
-
为什么有
WeakHashMap而没有SoftHashMap或PhantomHashMap很好的问题,为什么我以前没有注意到这个......?? -
ref != null检查没有意义。ref永远不会是null。 -
添加到 Q:
strongRef --> weakRef --> objA。现在,objA是否会被 GC,因为它有来自strongRef的间接引用。
标签: java reference weak-references phantom-reference soft-references