Kev*_*vin 6 java weak-references
我从维基百科看到了关于弱引用的这个例子:
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.get()返回null而不是sr.get().有人能让我知道原因吗?
非常感谢.
literal "I'm here"是一个编译时常量字符串,因此被放置在常量字符串池中,直到Java 7为止从未被垃圾收集.这意味着sr指向永远不会被垃圾收集的对象.
r另一方面,指向该字符串的副本,该字符串不在任何const池中,因此符合收集条件.
有关此字符串池的更多详细信息,请参阅String.intern()的文档
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |