【发布时间】:2014-11-06 00:22:51
【问题描述】:
我正在尝试理解弱引用,我在 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());
}
}
有人可以告诉我为什么只有 r 变为空,即使它持有一个强引用(新字符串)?
【问题讨论】:
-
我所知道的是弱引用不会被垃圾收集,而强引用是。既然如此,我不明白为什么 r 变为 null 而 sr 没有
-
如果我的理论是正确的,存储在
sr中的字符串存储在字符串池中,因为它是使用字符串文字创建的。存储在 r 中的字符串不是,因为它是使用new关键字创建的。由于String是sr在String Pool中仍然被引用,所以认为是强引用(这是纯理论,没有亲自研究过)
标签: java reference weak-references