package weakreference;
import java.lang.ref.WeakReference;
/**
* @author wison
*/publicclassTestWeakReference {publicstaticvoidmain(String[] args) {
Car car = new Car(22000,"silver");
WeakReference<Car> weakCar = new WeakReference<Car>(car);
int i=0;
while(true){
if(weakCar.get()!=null){
i++;
System.out.println("Object is alive for "+i+" loops - "+weakCar);
}else{
System.out.println("Object has been collected.");
break;
}
}
}
}
代码很简单,我就不解释了。
运行就可发现,最后真的被回收了。
等等,似乎有点问题?不是还有个强引用么?怎么也回收了啊?确实,请看Car car = new Car();怎么回事呢?
笔者猜测,是因为编译器优化了,因为下面的代码都没有用到这个引用,你可以试试在循环中,或者在循环外架上一个car的引用,自己试试吧。