当前位置: 代码迷 >> J2SE >> 关于System.gc()解决方法
  详细解决方案

关于System.gc()解决方法

热度:320   发布时间:2016-04-24 01:14:28.0
关于System.gc()
Java code
public class TestFinalize {    public static void main(String[] args) {        TestFinalize2 tf = new TestFinalize2();        tf.change();         new TestFinalize2();         System.gc();    }}class TestFinalize2 {    private boolean b = false;    TestFinalize2() {        b = true;    }    void change() {        b = false;    }    protected void finalize() {        if (b)            System.out.println("000");    }}

为什么不是每次都会输出000

------解决方案--------------------
我前几天才看的 不是很懂 但有一点你虽然条用了 gc()但系统并不一定给你处理

处理是不确定性的 必须是不可恢复才清理
------解决方案--------------------
System.gc只是让JVM尽力去运行GC,但其实JVM可以忽略这个建议,runFinalizeOnExit(true)一定会让JVM退出之前执行finalize方法,不过已经deprecated了,System.gc貌似在实际开发几乎不用,因为有可能你的JVM的GC算法在GC的时候会“stop the world”会影响效率,还是让JVM自己管理内存吧
------解决方案--------------------
更正一下这样修改main()方法:
Java code
public static void main(String[] args) {        new TestFinalize2();//没有引用链接到此对象        System.gc();//第一次标记,发现对象没有引用,把此对象加入F-Queue中        try {            Thread.sleep(500);//让主线程停止0.5秒,因为Finalizer方法优先级低        } catch (InterruptedException e) {        }        System.gc();//第二次执行标记    }
  相关解决方案