Java - 对象不是“垃圾收集”和“垃圾收集”。在节目结束?

public class Main {

    public static void main(String[] args) throws InterruptedException {
        ClassA a = new ClassA();
        a = null;

        //Runtime.getRuntime().gc();
        Thread.sleep(4000);
    }
}

public class ClassA {

    @Override
    public void finalize(){
        System.out.println("cleaned");
    }  
}
使用上面的代码,finalize()永远不会执行。控制台上没有任何内容。 从gc()中删除注释时,执行finalize()和 “已清理”将打印到控制台。 为什么我必须明确地调用垃圾收集器?     
已邀请:
无法保证在虚拟机出口处执行终结。 没有明确的GC,终结是在一个也退出的专用线程中运行的。 链接到解释: http://download.oracle.com/javase/6/docs/api/java/lang/System.html#runFinalizersOnExit%28boolean%29 如果您需要清理代码使用:
Runtime.addShutdownHook
http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29     

要回复问题请先登录注册