Java关闭/清理

Java关闭/清理,java,resources,release,Java,Resources,Release,我有一个类,它包含一些大对象: public class MyClass { BigObject bo; public MyClass() { ... } } 我是否应该制定一个类似以下的封闭方法: public void close() { bo = null; } 我认为这有利于垃圾收集(?)我走对了吗?如何清理这些类?一旦失去对外部MyClass对象的引用,内部BigObject引用将自动理解为不可访问,因此它对垃圾收集器是否为null没有任何影响。不要用这

我有一个类,它包含一些大对象:

public class MyClass {

    BigObject bo;

    public MyClass() { ... }
}
我是否应该制定一个类似以下的封闭方法:

public void close() {
    bo = null;
}

我认为这有利于垃圾收集(?)我走对了吗?如何清理这些类?

一旦失去对外部
MyClass
对象的引用,内部
BigObject
引用将自动理解为不可访问,因此它对垃圾收集器是否为
null
没有任何影响。不要用这些不必要的代码来扰乱你的代码库;编写充分利用Java中复杂垃圾收集子系统的优点和服务的代码。

一旦失去对外部
MyClass
对象的引用,内部
BigObject
引用被自动理解为不可访问,因此它对垃圾收集器来说无论是否为
null
。不要用这些不必要的代码来扰乱你的代码库;编写充分利用Java中复杂垃圾收集子系统的优点和服务的代码

我认为这有利于垃圾收集

不,这只会让代码更混乱

什么将保存对
MyClass
实例的引用?如果您真的需要
MyClass
的实例保持活动状态,而不是
BigObject
,那么-并且只有在那时-您才应该麻烦将
bo
设置为null。但同时,你也应该考虑你的设计。通常,一个类的所有状态对于它的整个生命周期都很重要。这条规则也有例外,但它们相对较少

MyClass
的实例符合垃圾收集条件时,其
bo
变量的值将与
BigObject
的实例是否符合垃圾收集条件无关,因此它是否被设置为null无关紧要。。。但是,这确实会带来很大的不同,因为您最终不需要编写大量代码来手动清理您自己的代码

您应该清理诸如流、本机句柄等资源,但通常可以让垃圾收集器处理内存

我认为这有利于垃圾收集

不,这只会让代码更混乱

什么将保存对
MyClass
实例的引用?如果您真的需要
MyClass
的实例保持活动状态,而不是
BigObject
,那么-并且只有在那时-您才应该麻烦将
bo
设置为null。但同时,你也应该考虑你的设计。通常,一个类的所有状态对于它的整个生命周期都很重要。这条规则也有例外,但它们相对较少

MyClass
的实例符合垃圾收集条件时,其
bo
变量的值将与
BigObject
的实例是否符合垃圾收集条件无关,因此它是否被设置为null无关紧要。。。但是,这确实会带来很大的不同,因为您最终不需要编写大量代码来手动清理您自己的代码


您应该清理诸如流、本机句柄等资源,但通常您可以让垃圾收集器处理内存。

不,这是不必要的。让它超出范围。另请参阅Java中的不要考虑清理对象。Java将为您处理它。你们甚至不能控制垃圾收集部分。然而,如果您不想让软件的任何部分再访问对象,那么将对象设为null可能是个好主意。不,这是不必要的。让它超出范围。另请参阅Java中的不要考虑清理对象。Java将为您处理它。你们甚至不能控制垃圾收集部分。然而,如果您不想让软件的任何部分再访问对象,那么将对象设为null可能是个好主意