java中gc()何时调用finalize()方法

       有人会说:这个简单,直接调用System.gc()或者Runtime.getRuntime().gc();就可以了 。那我想说System.gc()到底什么时候调用finalize()呢?下面的列子会说明java中gc()何时调用finalize()方法_第1张图片

这个列子的运行结果是报了:

Exception in thread "main" java.lang.NullPointerException
    at day09.Finalize.main(Finalize.java:19)
make: *** [main] 错误 1

为什么呢?

1.这个说明了gc()调用finalize()方法的时间是不确定的,虽然gc()是强制回收但是也只是通知系统尽快去处理。java中gc()何时调用finalize()方法_第2张图片

这个例子只是在System.gc()后让他睡1秒,可是结果是能打映出"info.......",这个说明了什么呢?

1.这个说明,调用System.gc()后系统会很快的去处理finalize()方法,而不会出现程序运行结束还没处理


那么怎么能让系统立马去处理finalize()方法呢?

java中gc()何时调用finalize()方法_第3张图片

在system.gc()后调用System.runFinalization();方法可以立马区执行finalize()方法。

你可能感兴趣的:(java)