att*_*182 2 java reference weak-references
我试图理解弱引用,我在wiki中看到了以下代码:
import java.lang.ref.WeakReference;
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);
// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么只有r变为null,即使它持有一个强引用(新字符串)?
第一个WeakReference变为null,因为它是对新String对象的唯一引用,因此没有对它的强引用,并且它有资格进行收集.
第二个WeakReference不会变为null,因为它引用的对象是一个字符串文字,这是Java语言规范要求实现的,这会导致从字符串池中强烈引用它,这会阻止其垃圾回收.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |