1

私はいくつかの大きなオブジェクトを保持するクラスを持っています:

public class MyClass {

    BigObject bo;

    public MyClass() { ... }
}

次のようなcloseメソッドを作成する必要があります。

public void close() {
    bo = null;
}

これはガベージコレクションに適していると思います(?)私は正しい方向に進んでいますか?このクラスのクリーンアップにどのようにアプローチする必要がありますか?

4

2 に答える 2

4

これはガベージコレクションに適していると思います

いいえ、コードが混乱するだけです。

のインスタンスへの参照を保持するのはMyClass何ですか?MyClassのインスタンスが本当に生き続ける必要があるが、ではない場合はBigObject、-そしてそのときだけ-わざわざbonullに設定する必要があります。しかし同時に、あなたはあなたのデザインも考慮する必要があります。通常、クラスのすべての状態は、その存続期間全体にわたって重要です。その規則には例外がありますが、それらは比較的まれです。

のインスタンスがMyClassガベージコレクションに適格である場合、そのbo変数の値は、のインスタンスがガベージコレクションに適格であるかどうかとは無関係であるBigObjectため、nullに設定されているかどうかは関係ありません...しかし、自分の後で手動でクリーンアップしようとして作成する必要がなくなるコードの量の点で大きな違いがあります。

ストリームやネイティブハンドルなどのリソースをクリーンアップする必要がありますが、通常はガベージコレクターにメモリを処理させることができます。

于 2013-03-26T20:19:21.820 に答える
0

MyClass外側のオブジェクトへの参照を失うとすぐに、内側のBigObject参照はクリーチできないと自動的に理解されるため、ガベージコレクターがそうであるかどうかに違いはありnullません。このような不要なコードでコードベースを乱雑にしないでください。Javaの高度なガベージコレクションサブシステムの利点とサービスを十分に活用するコードを記述します。

于 2013-03-26T20:19:10.290 に答える