日期:2014-05-20  浏览次数:20705 次

有关java内存的问题
有如下代码:

public   void   foo()   {
List   list   =   new   ArrayList();
Obj   o1   =   new   Obj();
Obj   o2   =   new   Obj();

list.add(o1);
list.add(o2);

o1   =   null;
o2   =   null;

Obj   o3   =   list.get(0);
list   =   null;
}

请问该段代码中的o2最终会被垃圾回收器回收吗?

------解决方案--------------------
会,应该在该对象的生命结束的时候
------解决方案--------------------
答案是肯定.

当执行o2 = null;时,o2就没有任何对象跟它关联了,此时,o2也就是垃圾回收器的回收对象,但此时不一定别回收,因为不确定GC是否在工作,假如正在工作,马上会被回收掉;假如GC还没有运行,o2就会一直存在,直到GC运行.
------解决方案--------------------
ls正解,GC的优先级是比较低的
------解决方案--------------------
回复人:ieo2004(ieo) ( 一级(初级)) 信誉:97 2007-3-22 11:16:24 得分:0
?

java里面有什么方法可以在foo方法结束前手动释放掉o3所引用对象占用的内存?
Top

--------------------------

无能为力,不敢保证。