我的主要问题是在执行行
时真正创建了多少个对象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
}
}
答案 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
}
}
}