求各位大神指点,已将引用撤销,为什么还是打印不出效果?
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public void setName(String name) {
this.name=name;
}
public void setAge(int age) {
this.age=age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String toString() {
return "姓名:"+name+this.getName()+",年龄:"+this.getAge();
}
public void finalize() throws Throwable{
System.out.println("我被回收了,我完蛋了...("+this+")");
}
}
public class SystemDemo02 { public static void main(String[] args) {
Person p=new Person("张三",100);
p=null;
System.gc();
}

解决方案 »

  1.   

    简单地说,就算你调用System.gc,也不一定马上GC,一切看jvm心情。它可能啥也不做,也可能释放掉一部分资源,不同版本的JVM可能行为也不一样,根据你给jvm分配的内存不同,行为也不一样。任何依靠finalize方法实现的资源释放都是不可靠的,任何需要调用System.gc的代码都是坏掉的(好吧是绝大部分)。从第一天开始牢记这一点!
      

  2.   

    可是当JVM回收垃圾之前,一定是调用finalize()的,对吗?
      

  3.   

    是的,会调用被回收的那个对象的finalize。