検索

ホームページ  >  に質問  >  本文

java - 关于System.gc()的执行?

package FinalizeTest;

public class Person {
    
    public Person(){
        System.out.println("person created");
    }

    @Override
    protected void finalize() throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("gc ");
        throw new Exception("no effect");
    }
}



package FinalizeTest;

public class MainTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person per = new Person();
        per = null;
        System.gc();
        System.out.println("hello world");

    }

}

输出为

person created
hello world
gc 

代码如上所示, 求解释为什么hello world会在gc之前输出??

PHP中文网PHP中文网2889日前280

全員に返信(4)返信します

  • PHP中文网

    PHP中文网2017-04-17 17:59:13

    Java について finalize() C/C++ と混同しないでください。Java プログラマーはガベージ コレクションのタイミングを決定できません。
    公式説明:

    ガベージ コレクションによってオブジェクトへの参照がなくなったと判断された場合に、オブジェクトのガベージ コレクターによって呼び出されます。

    finalize() はリサイクル中のアクションを定義するだけですが、リサイクルの具体的な時間は依然としてガベージ コレクター自体によって決定されます。

    Javadoc をよく読んでください

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:59:13

    System.gc(); は gc にリサイクル アクションを実行するように指示するだけですが、何をリサイクルするかは gc 自体によって決定されます

    返事
    0
  • 黄舟

    黄舟2017-04-17 17:59:13

    System.gc() の機能は、仮想マシンにガベージ コレクションを実行するよう通知するだけであり、リサイクルするかどうかは仮想マシンによって決定されます。

    このアクションは非同期であることがわかります。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:59:13

    簡単に言うと、 System.gc(); を積極的に呼び出すかどうかは、ガベージを実行するガベージ コレクター自体によって決定されます。コレクション。

    返事
    0
  • キャンセル返事