到达main终点时有多少对象符合垃圾回收的条件?

时间:2012-07-31 08:38:51

标签: java

我的主要问题是在执行行

时真正创建了多少个对象
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 个答案:

答案 0 :(得分: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
  }
}

答案 1 :(得分:0)

假设没有干预GC,那么创建的三个Dozens实例都将符合条件。

原始数组没有装箱。

答案 2 :(得分:0)

2个实例,但你在想什么:O

da[1] = d; //points 
d = null; //attended. 
da[1] = null; //already null.

答案 3 :(得分:0)

类Dozens包含一个int数组对象。因此,每次创建Dozens对象时,都会创建两个对象(Dozens的一个实例,它再次包含一个int数组的实例)。

    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]; //one object capable of holding 3 instance 
        da[0] = new Dozens();   //2 object 
        Dozens d = new Dozens(); //2 object 
        da[1] = d;            //no new object d,da[1] point to same d object
        d = null;         //one object for gc
        da[1] null;       //one object for gc
        //do stuff
    }
  }
}