Java gc问题:10个整数的数组是单个对象还是10个对象?

Java gc问题:10个整数的数组是单个对象还是10个对象?,java,garbage-collection,Java,Garbage Collection,如果我有一个数组,就说- int[]a=新的int[10] Java GC在收集时是否将其视为10个对象或单个对象 更新: 因此,根据给出的答案,从GC的角度来看,它不是比 List l; for(i =0;i<1000;i++) l.add(new MyObj(343,"asdfasfd")); 列表l; 对于(i=0;i这是单个对象。数组是一个连续对象,int是基本类型,而不是对象类型,因此没有为10ints创建对象 // 1 object int[] intArray

如果我有一个数组,就说-
int[]a=新的int[10]

Java GC在收集时是否将其视为10个对象或单个对象

更新:
因此,根据给出的答案,从GC的角度来看,它不是比

List l; 
for(i =0;i<1000;i++)  
  l.add(new MyObj(343,"asdfasfd"));  
列表l;

对于(i=0;i这是单个对象。数组是一个连续对象,
int
是基本类型,而不是对象类型,因此没有为10
int
s创建对象

// 1 object
int[] intArray = new int[10];
如果你有一个由10个对象组成的数组,那么就有11个对象:10个对象加上数组。数组本身仍然只是一个对象;它恰好包含对10个其他对象的引用

// 1 object...
Object[] objectArray = new Object[10];

// ...Plus 1 for each element once they are instantiated.
for (int i = 0; i < 10; ++i) {
    objectArray[i] = new Object();
}
//1对象。。。
Object[]objectArray=新对象[10];
//…实例化后,每个元素加1。
对于(int i=0;i<10;++i){
objectArray[i]=新对象();
}

就垃圾收集而言,数组是一个单独的对象。如果它是一个基本类型的数组,如
int
,则只涉及一个对象,或者整个数组是GC'd的,或者没有

如果您有一个引用类型数组,比如说
Object
,那么这是一个数组对象,加上最多10个数组引用的引用类型对象(因此10个引用的数组最多可能涉及11个对象)。如果从数组中删除其中一个对象,例如将其设置为
null
,或使用另一个对象覆盖它,并且假设该对象未被任何其他变量引用,则该对象将符合垃圾收集的条件。例如:

Object a = new Object(); // "Our Object"
Object[] array = new Object[10];
array[0] = a;
a = null; // a no longer references our Object
// now array[0] is the only reference to our Object
// and it isn't eligible for garbage collection yet
array[0] = null;
// Now our Object is eligible for garbage collection
一个真正的答案(从某种意义上说,它会告诉你第一个案例的垃圾收集成本是否更高)需要一个比我更了解垃圾收集器的人


但是,假装垃圾收集器真的那么重要吗?
String
s和
MyObject
s的生命周期基本相同,GC非常智能。你可能会稍微缩短垃圾收集时间,但你为此付出的代价是,必须手动管理这两个arrays——基本上放弃了OO——是代码复杂性和可能的bug的急剧增加。

我同意——除非你有几十亿个对象的周转,这让你的GC工作非常困难——不要搞乱它。
Object a = new Object(); // "Our Object"
Object[] array = new Object[10];
array[0] = a;
a = null; // a no longer references our Object
// now array[0] is the only reference to our Object
// and it isn't eligible for garbage collection yet
array[0] = null;
// Now our Object is eligible for garbage collection