如何解决为什么这个具有强烈参考意义的对象将被回收
当我学习threadlocal时,我为它的弱引用回收机制感到困惑,所以我有以下测试代码:
public static void main(String[] args) {
Car car = new Car(22000,"sliver");
Entry entry = new Entry(car,new Object());
int i = 0;
while (true) {
if (entry.get() != null) {
i++;
System.out.println("Object is alive for " + i + " loops - " + entry);
} else {
// Object is alive for 61441 loops - Entry@490d6c15
// null,java.lang.Object@7d4793a8
// Object has been collected.
System.out.println(entry.get() + "," + entry.getValue());
System.out.println("Object has been collected.");
break;
}
}
}
class Car {
private double price;
private String colour;
public Car(double price,String colour) {
this.price = price;
this.colour = colour;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
}
class Entry extends WeakReference<Car> {
Object value;
Entry(Car k,Object v) {
super(k);
value = v;
}
public Object getValue() {
return value;
}
}
在我的计算机中,它将在6W个周期后执行到else branch
我的问题是:
为什么entry.get()
返回null,所以前面也有一个很强的引用:Car car = new Car(22000,"sliver");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。