有人会说:这个简单,直接调用System.gc()或者Runtime.getRuntime().gc();就可以了 。那我想说System.gc()到底什么时候调用finalize()呢?下面的列子会说明:
这个列子的运行结果是报了:
Exception in thread "main" Java.lang.NullPointerException
at day09.Finalize.main(Finalize.java:19)
make: *** [main] 错误 1
为什么呢?
1.这个说明了gc()调用finalize()方法的时间是不确定的,虽然gc()是强制回收但是也只是通知系统尽快去处理。
这个例子只是在System.gc()后让他睡1秒,可是结果是能打映出"info.......",这个说明了什么呢?
1.这个说明,调用System.gc()后系统会很快的去处理finalize()方法,而不会出现程序运行结束还没处理
那么怎么能让系统立马去处理finalize()方法呢?
在system.gc()后调用System.runFinalization();方法可以立马区执行finalize()方法。