关闭

finalize()的调用

196人阅读 评论(0) 收藏 举报
分类:

public class A {
	public A() {
		System.out.println("A()");
	}
	
	protected void finalize() throws Throwable {
		System.out.println("~A()");
	};
}

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		a = null;
		System.gc();
	}
}

可以看到这里输出:

A()
~A()


假如将代码修改成这样子:

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		System.gc();
	}
}


可以看到这里输出:

A()

原因也很简单,在这里调用System.gc()的时候,临时变量还在生命周期中。所以不会被回收。




有时候

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		a = null;
		System.gc();
	}
}
还是不会输出~A(),原因也很简单,System.gc()仅仅是建议性的gc,是否执行gc要看gc系统。







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:258107次
    • 积分:4274
    • 等级:
    • 排名:第7430名
    • 原创:119篇
    • 转载:371篇
    • 译文:0篇
    • 评论:12条