这个方法是在JAVA运行系统退出时使用,如果System.runFinalization(true),那么对象结束后会调用finalize()方法,一般情况下,finalize()不一定会调用。

解决方案 »

  1.   

    那么System.gc()的功能不是一样吗?
    看sun的文档,System.gc()是让所有回收所有discarded的对象
    而对于System.runFinalization的描述是:
    Calling this method suggests that the Java Virtual Machine expend effort toward running the finalize methods of objects that have been found to be discarded but whose finalize methods have not yet been run.
    小弟理解两者的区别是:某些对象已经discarded了,但如果没有出现内存不够的问题,尚未被发现。(因为此时系统没有去检查)这些对象在执行System.runFinalization()后,不会执行finalize的内容。
    而当执行System.gc的时候,系统重新检查出所有已经没有用的对象,然后强制finalize。
    现在我终于明白了为什么候捷的TIJ上说,runFianlization()好像并没有什么影响了。因为如果系统检查到了,自然会finalize,如果还没有执行检查,runFinalization()也没有用。ft!那么这个函数到底设计出来干吗呢?
    是否如此,请大家指教。
      

  2.   

    如果我说得不对,请大家指教,System.runFinalization();是用来通知系统调用finalize()的,在调用这个函数之后,系统并不会立即调用这个函数,而是要到系统内存不够使用时才会真正调用。System.runFinalization();
    System.gc();是通知系统立刻调用垃圾收集程序。SCJP考试指南里的原话:
    The Java language provides some built-in routines for controlling garbage collection: the methods System.gc() and System.runFinalization(). System.gc() requests that garbage collection be run. System.runFinalizers() asks that finalizers be executed, but that memory is not necessarily freed.