2

他のオブジェクトへの参照を保持する、作成したこのオブジェクトがあります。

public class ListHandler {

    private AppVariables app; //AppVariables instance
    private Extra extra; //the extra argument represanting the list
    private ArrayList<FacebookUser> arrayList; //the array list associate with the list given
    private Comparator<FacebookUser> comparator; //the comparator of the list
    private String emptyText; //list empty text

    /**
     * Constructor - initialize a new instance of the listHandler
     * @param app the current {@link AppVariables} instance
     * @param extra the {@link Extra} {@link Enum} of the list
     */
    public ListHandler(AppVariables app, Extra extra)
    {
        this.app = app;
        this.extra = extra;
         //set the array list to match the list given in the arguments
        setArrayList(); 
        setComparator();
        setEmptyTest();
    }
    /**
     * Clear all resources being held by this object
     */
    public void clearListHandler()
    {
        this.arrayList = null;
        this.comparator = null;
        this.app = null;
        this.emptyText = null;
        this.extra = null;      
    }   

. clearListHandler()_ null_ ListHandler_

それは必要ですか?後でガベージ コレクションを取得するには、すべてのオブジェクトをクリアする必要がありますか?それとも、GC は、初期化したオブジェクトが使用されなくなったため、このオブジェクトが使用されなくなったことを認識しますか?

4

3 に答える 3

4

ガベージ コレクションは非常にスマートであり、通常、オブジェクトを明示的に null に設定する必要はありません (ただし、ビットマップを使用する場合に役立つ場合があります)。

オブジェクトは、ライブ スレッドまたは静的参照から到達できない場合、ガベージ コレクションまたは GC の対象になります。つまり、すべての参照が null の場合、オブジェクトはガベージ コレクションの対象になると言えます。循環的な依存関係は参照としてカウントされないため、オブジェクト A がオブジェクト B の参照を持ち、オブジェクト B がオブジェクト A の参照を持ち、他のライブ参照がない場合、オブジェクト A と B の両方がガベージ コレクションの対象になります。通常、オブジェクトは次の場合に Java でガベージ コレクションの対象になります。

  1. そのオブジェクトのすべての参照が明示的に null に設定されている (例: object = null)
  2. オブジェクトはブロック内で作成され、制御がそのブロックを終了すると参照がスコープ外になります。
  3. オブジェクトが別のオブジェクトの参照を保持し、コンテナ オブジェクトの参照を null に設定すると、親オブジェクトが null に設定され、子または含まれるオブジェクトが自動的にガベージ コレクションの対象になります。
  4. オブジェクトに WeakHashMap によるライブ参照しかない場合、ガベージ コレクションの対象になります。

ガベージ コレクションの詳細については、こちらを参照してください。

于 2013-03-28T14:14:04.250 に答える
1

あなたはそれをすべきではありません。ガベージ コレクターは、すべてのオブジェクトをクリアする最適なタイミングを自動的に決定します。これこれを読んでみてください。

于 2013-03-28T14:22:38.417 に答える
0

いいえ。Dalvik/Java 仮想マシンはメモリを割り当て、必要に応じてメモリの割り当てを解除します。

あなたがしていることに問題はありません、それはただ不必要です。

于 2013-03-28T14:19:23.590 に答える