弱引用,如果一个对象只被弱引用 引用,那么GC的时候回被回收。
public class MyWeakEntity1 extends WeakReference<Test3> {
public MyWeakEntity1(Test3 referent) {
super(referent);
}
}
测试:
public class WeakTest4 {
public static void main2(String[] args) {
// Test3对象 不止 被弱引用entity1 ,也被test3 引用。在强制gc后,test3 引用的对象还在
final Test3 test3 = new Test3();
MyWeakEntity1 entity1 = new MyWeakEntity1(test3);
System.out.println("entity1.test3 : " + entity1.get());
System.gc();
try {
Thread.sleep(5 * 1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("entity1.test3 : " + entity1.get());
}
public static void main1(String[] args) {
// Test3 对象 只被 弱引用 引用
MyWeakEntity1 entity1 = new MyWeakEntity1(new Test3());
System.out.println("entity1.test3 : " + entity1.get());
// 强制JVM GC
System.gc();
try {
Thread.sleep(5 * 1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 重新获取 引用的值,就是null
System.out.println("entity1.test3 : " + entity1.get());
}
}