我觉得这道题问的是程序结束时VM为什么没有垃圾回收的动作public class X{ public Object m(){ Object o = new Float(3.14F); Object [] oa = new Object[1]; oa[0] = o; //oa[0] 的引用指向了o o=null; //o的引用被指向了null //但o原来所指向的对象依然被oa[0]所引用 //因此o原来所指向的对象不满足垃圾回收条件 return oa[0]; } }记得在学SCJP的时候看过书上对垃圾回收条件是这样描述的,一个对象空间只有在没有任何引用再指向它的时候,才会被VM回收,而且回收的时间不确定的。
在oa[0]=o 之后
原来o所指向的数据存在oa[0]的引用,所以即使o=null,但是垃圾回收并没有发生!
垃圾回收是当逼近内存用完的那一刻启动的,所以也是是不知道它是什么时候开始调用的。
如果你要强制运行的话就是调用: System.gc();
public Object m(){
Object o = new Float(3.14F);
Object [] oa = new Object[1];
oa[0] = o; //oa[0] 的引用指向了o
o=null; //o的引用被指向了null
//但o原来所指向的对象依然被oa[0]所引用
//因此o原来所指向的对象不满足垃圾回收条件
return oa[0];
}
}记得在学SCJP的时候看过书上对垃圾回收条件是这样描述的,一个对象空间只有在没有任何引用再指向它的时候,才会被VM回收,而且回收的时间不确定的。