3

そのように定義されたフラグメントがあるとしましょう:

public class MyFragment extends Fragment {
   private static String sample = "";

   public static void setSample(String s) {
      sample = s;
   }
}

アプリケーションの存続期間中、サンプルはガベージコレクションを取得しますか(MyFragmentへの参照が存在するかどうかに関係なく、これは問題ではないと思います)?

4

3 に答える 3

4

のインスタンスの数は関係ありMyFragmentません。

sampleロードされたクラスローダーが有効である限り、変数は事実上GCルートになりますMyFragment

変数がガベージコレクションされることは決してないことに注意することが重要です-オブジェクトはガベージコレクションされます。

于 2012-08-06T15:20:22.087 に答える
3

クラスがアンロードされていない限り、サンプル変数はガベージコレクションされません。

クラスまたはインターフェースは、§12.6で説明されているように、その定義クラスローダーがガベージコレクターによって再利用される可能性がある場合にのみアンロードできます。ブートストラップローダーによってロードされたクラスとインターフェイスはアンロードされない場合があります

于 2012-08-06T15:21:12.353 に答える
2

private static String sample

コードで最初に参照されたとき(クラスローダーがロードしたとき)に存在し始め、既存のオブジェクト参照から独立して存続します。

于 2012-08-06T15:23:05.833 に答える