finalize()的调用

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系统。







阅读更多
个人分类: java
上一篇Java 对象释放与 finalize 方法
下一篇ViewPager+Fragment LazyLoad最优解
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭