0

私の主な問題は、行の実行時に実際に作成されるオブジェクトの数です

Dozens [] da = new Dozens[3];

また、メイン関数の最後でガベージ コレクションの対象となるオブジェクトの数

class Dozens {
  int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12};
}

public class Eggs {
  public static void main(String[] args) {
    Dozens [] da = new Dozens[3];
    da[0] = new Dozens();
    Dozens d = new Dozens();
    da[1] = d;
    d = null;
    da[1] = null;
    // do stuff
  }
}
4

4 に答える 4

2

実行後Dozens [] da = new Dozens[3];、単一のオブジェクトが作成されます。メソッドが終了した後、mainで作成したオブジェクトを使用する別のスレッドを作成しない場合、作成したmainすべてのオブジェクトがガベージ コレクションに使用できます。

public class Eggs {
  public static void main(String[] args) {
    Dozens [] da = new Dozens[3]; //one array object created
    da[0] = new Dozens(); // one Dozens object created
    Dozens d = new Dozens(); //one Dozens object created
    da[1] = d; 
    d = null; //nothing available for gc here, as there is still a referrence to that Dozens object (da[1])
    da[1] = null; //da[1] available for gc
    // do stuff
  }
}
于 2012-07-31T08:44:27.543 に答える
0

2つのインスタンスですが、それで何を考えていましたか:O

da[1] = d; //points 
d = null; //attended. 
da[1] = null; //already null.
于 2012-07-31T08:59:01.570 に答える
0

介在する GC がないと仮定すると、作成された Dozens の 3 つのインスタンスはすべて適格になります。

プリミティブ配列のボックス化はありません。

于 2012-07-31T08:44:56.590 に答える