给我一个方法,问我什么时候可以进行垃圾收集,我的意思是在哪一行。我相信o
和oa
都可以进行垃圾收集。从此,它们被设置为null
。如果我错了,请纠正我。但是,问题是,什么时候有资格使用gc
,我的意思是在哪一行。 ?
public Object m() {
Object o = new Float(3.14F);
Object[] oa = new Object[1];
oa[0] = o; /* Line 5 */
o = null; /* Line 6 */
oa[0] = null; /* Line 7 */
return o; /* Line 8 */
}
请任何人解释。 ?
最佳答案
让我们遍历代码:
1) o = new Float();
2) oa = new Object[];
at this point we have 2 objects.
3) oa[0] = o;
at this point oa[0] holds the reference of o.
4) o = null;
o is still being referenced by oa[0]
5) oa[0] = null
o now has zero references.
6) return o;
o is null.
第7行是发生
o
的GC资格的地方。在功能退出之前,oa
不能用于GC。通常,对象只有在没有引用时才有资格使用GC。处理
String
时要非常小心,因为有一个特殊的地方称为字符串池。所以下面的代码:void foo()
{
String s = "foo";
s=null;
return s;
}
绝对不能保证
s
可以使用该功能。意见中的问题
您说的一个问题..oa直到该功能才可以使用GC
退出。但是,在返回o之前,将oa设置为null,并且它不存在
也提到
回答:
oa未设置为null。设置为null的是位于oa [0]的对象
(oa的第一个索引)。如果该行是oa = null,那将是真的,
并且无论oa中唯一的项目是否为null,实际上都不会
使包装器(在这种情况下为数组)为空。类似于拥有一个
列出并清空其所有元素不会使列表为空。