私は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());
}
}
実行すると、これが結果です
gc の前: r=私はここにいます, static=私はここにいます
gc の後: r=null、static=私はここにいます
sr
とr
変数はどちらも文字列オブジェクトを参照しています。はガベージ コレクションになりましたが、ガベージ コレクタを呼び出した後にガベージ コレクションが行われなかっr
たのはなぜですか?sr
これがどのように起こったのか、私はただ興味があります。