标签:
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