一个java垃圾回收的例子

来源:百度知道 编辑:UC知道 时间:2024/07/04 09:03:54
Given:
1. public class X (
2. public object m () {
3. object o = new float (3.14F);
4. object [] oa = new object [1];
5. oa[0]= o;
6. o = null;
7. return oa[0];
8. }
9. }
When is the float object created in line 3, eligible for garbage collection?
A. Just after line 5
B. Just after line 6
C. Just after line 7 (that is, as the method returns)
D. Never in this method.
Answer: D
请高手们解释一下为什么选择D?
兄弟,看了你的解释,懂了一点但是那些对象不都是在方法中定义的吗?方法中定义的变量(局部变量)但方法结束的时候不就不再起作用了吗?这时不就可以被回收了吗?请高手帮忙解答谜团!

3行-创建2各对象
一个是指向对象:o
一个是实体对象:Float (3.14F)
o指向Float(3.14F)
4行-新建数组oa
5行-令oa数组的第一个对象指向Float(3.14F)
6行-o指向null
7行-返回oa的第一个对象

实体对象所对应的指向对象一直都没有消失(先是o,后是oa[0])
所以,实体对象Float(3.14F)就一直不会被gc了

补充:
不对阿,方法结束的时候
实体对象一直存在阿,返回值对象指向实体对象
所以它不会被gc的
你先要知道,java在new一个object的时候
会生成2个对象
一个是指向对象,一个是实体对象(内存中)
指向对象→实体对象
gc是指回收内存中的实体对象