首页 > 编程语言 > 详细

java: system.gc()和 finalize 的使用情景

时间:2015-08-14 11:48:25      阅读:284      评论:0      收藏:0      [点我收藏+]

 finalize的作用的在进行垃圾回收前,执行的一个方法,这个方法里面不能放回收资源的东西,比如关闭流等,因为这个方法不一定被调用

这个方法只有进行垃圾回收时才被调用

下面这个例子是关于finalize的一个使用情景


package day20150814;

public class Finalize {

	public static void main(String[] args) {
		Check check1 = new Check(),check2 = new Check();
		check1.doChecked();//check1执行方法
		System.out.println("check1:"+check1);
		System.out.println("check2:"+check2);
		check1=null;//失去引用
		check2=null;
		System.gc();//强制gc
		//Runtime.getRuntime().gc();
	}
}

class Check{
	private boolean checked ;
	
	Check(){
		checked=false;
	}
	
	public void doChecked(){
		checked = true;
	}
	
	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("finalize");
		if(!checked){
			System.out.println(this+"doChecked没有执行~");
		}else{
			System.out.println(this+"doChecked执行了~~");
		}
		super.finalize();
	}
}


执行结果:

check1:day20150814.Check@3ce53108
check2:day20150814.Check@6af62373
[GC 323K->320K(19648K), 0.0032962 secs]
[Full GC 320K->201K(19648K), 0.0098180 secs]
finalize
day20150814.Check@6af62373doChecked没有执行~
finalize
day20150814.Check@3ce53108doChecked执行了~~


小结:

finalize可以放在类中,作为对象终结条件的验证,在资源被回收时,对一些条件进行判断.

另外system.gc()不会对所有资源都回收,只会回收失去引用的资源,所以要加上check1=null的代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

java: system.gc()和 finalize 的使用情景

原文:http://blog.csdn.net/bigcaicai1995/article/details/47658131

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!