Java 关闭/清理

标签 java resources release

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

public class MyClass {

    BigObject bo;

    public MyClass() { ... }
}

我应该像下面那样做一个关闭方法吗:

public void close() {
    bo = null;
}

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

最佳答案

I think this is good for garbage collection

不,它只会让代码更困惑。

什么将保存对 MyClass 实例的引用?如果您确实需要 MyClass 的实例保持 Activity 状态,而不是 BigObject,那么 - 只有这样 - 您是否应该费心将 bo 设置为无效的。但同时,你也应该考虑你的设计。通常,一个类的所有状态在其整个生命周期中对它都很重要。该规则也有异常(exception),但它们相对较少。

MyClass 的实例符合垃圾回收条件时,其 bo 变量的值将与 BigObject 的实例是否存在无关有资格进行垃圾回收,所以它是否被设置为 null 并不重要...但它确实对您最终的代码量产生了很大的影响不必自己尝试手动清理。

您应该清理流、 native 句柄等资源 - 但通常您可以让垃圾收集器处理内存。

关于Java 关闭/清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646501/

相关文章:

Java数组子串

java - Spring :找不到资源

objective-c - 释放或设置为零保留成员

release - 发布和迭代有什么区别?

language-agnostic - 项目/代码发布策略

java - 如何在类之间共享类常量?

java - 使用 JPA 查询注释更新查询至 Oracle 11g 挂起

Java 有效地比较两个列表

c - 资源获取和pthreads

c# - 使用资源文件进行本地化