0

私は次のコードを持っています:

public class MyOjbect {
public Integer z = 111;
@Override
protected void finalize() throws Throwable {
    System.out.println("invoking GC in MyOjbect");
    super.finalize();
         }
     }
      public class GC {
private MyOjbect o; 
private void doSomethingElse(MyOjbect obj) {
    o = obj;
}
@SuppressWarnings("unused")
public void doSomething() throws InterruptedException {
    System.out.println("Start");
    MyOjbect o = new MyOjbect();        
     doSomethingElse(o);        
     o = new MyOjbect();
     doSomethingElse(null);
     System.gc();
    // System.out.println("checking "+o.z);
}
public static void main(String[] args) throws InterruptedException {
    GC gc = new GC();
    gc.doSomething();
       }
}

メソッドを実行した後、なぜ変数をGCガベージするのだろうか。変数でさえまだnullではありません。実際、後でコードをデバッグする と、null ではなくガベージになります。さらに、最後の行のコメントを外すと、GC は変数を出力し、その後 GC を呼び出します。odoSomethingElseoodoSomethingElseGCo.z

更新:ローカル変数がフィールドと同じ理由を尋ねる人のために、SCJPテスト試験から問題をそのままコピーしました

4

1 に答える 1