Java内存集合用法

时间:2012-03-19 15:56:39

标签: java

我有一个尝试捕获,最后像这样阻止。

Client client = new Client();
try {
   ...
}
catch {
   ...
}
finally {
   client = null;
}

我想问一下,如果发生异常,是否需要client = null来消除客户端对象的内存使用。

4 个答案:

答案 0 :(得分:4)

只要client变量不再可达(即不再有GC root),就有资格进行垃圾回收。

在您的示例中,一旦方法退出(无论是抛出异常还是“正常”返回),似乎client将无法访问,因此将其指定为null是不必要的。

答案 1 :(得分:3)

每当一个对象因任何原因没有引用 时,它就有资格进行垃圾收集,包括由于程序离开函数或语句块而变量超出范围。换句话说,没有。

答案 2 :(得分:2)

客户端对象受范围限制。如果客户端对象具有类范围,那么它将一直存在直到类加载,如果客户端具有方法范围,那么它将一直存在直到控制将在方法内部。

除了这两个范围之外还有很多范围。

所以不需要消灭对象。您只需要在使用某些资源(如文件IO或数据库连接)时消除。

答案 3 :(得分:1)

不,Java的垃圾收集器takes care of this

我会在额头上纹身,因为这是Java与C / C ++相关的一大优势。