好象在CSDN上,有人说这两者功能一模一样的,既然一样,,在同一个类里,何必定义两个方法。

解决方案 »

  1.   

    runFinalization
    public static void runFinalization()运行处于挂起终止状态的所有对象的终止方法。 
    调用该方法说明 Java 虚拟机做了一些努力运行已被丢弃对象的 finalize 方法,但是这些对象的 finalize 方法至今尚未运行。当控制权从方法调用中返回时,Java 虚拟机已经尽最大努力去完成所有未执行的终止方法。 调用 System.runFinalization() 实际上等效于调用:  Runtime.getRuntime().runFinalization()gc
    public static void gc()运行垃圾回收器。 
    调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。 调用 System.gc() 实际上等效于调用:  Runtime.getRuntime().gc()
    这两个真的一样么?
      

  2.   

    我的认识是,runFinalization()是只是执行还没有完成的finalize 方法,还是尽量的。
    finalize 方法是所有类继承了Ojbect的。所以应该比gc()还要上层的关系,
      

  3.   

    如果你想立即 GC,
    要按顺序调用2个方法:
    gc();
    runFinalize(); 它会立即清理内存,不过不知道不同的 JVM 是不是有不同。我在 Eclipse 插件中用过,确实立即执行。只写一个 gc() 它总是置若罔闻。