我有一个尝试捕获,最后像这样阻止。
Client client = new Client();
try {
...
}
catch {
...
}
finally {
client = null;
}
我想问一下,如果发生异常,是否需要client = null
来消除客户端对象的内存使用。
答案 0 :(得分:4)
只要client
变量不再可达(即不再有GC root),就有资格进行垃圾回收。
在您的示例中,一旦方法退出(无论是抛出异常还是“正常”返回),似乎client
将无法访问,因此将其指定为null是不必要的。
答案 1 :(得分:3)
每当一个对象因任何原因没有引用 时,它就有资格进行垃圾收集,包括由于程序离开函数或语句块而变量超出范围。换句话说,没有。
答案 2 :(得分:2)
客户端对象受范围限制。如果客户端对象具有类范围,那么它将一直存在直到类加载,如果客户端具有方法范围,那么它将一直存在直到控制将在方法内部。
除了这两个范围之外还有很多范围。
所以不需要消灭对象。您只需要在使用某些资源(如文件IO或数据库连接)时消除。
答案 3 :(得分:1)
不,Java的垃圾收集器takes care of this。
我会在额头上纹身,因为这是Java与C / C ++相关的一大优势。