0

Imは現在私のアプリケーションのメモリスイープを行っており、クラスが不要になったときに、クラス内の変数public staticの扱いに関する簡単な質問があります。この例は、ネットワーク要求である:Androidのメモリ使用量 - 静的変数を無効にする必要がありますか?

public class NetworkRequest { 

    public static String URL = "www.somestring.com/endpoint?withsomeparameters=true" 

    public void perform(){ 
     // the rest of the request logic... 
    } 
} 

私はそうのように、このクラスを開始した後:

NetworkRequest networkRequest = new NetworkRequest(); 

networkRequest.perform(); 
networkRequest = null; 

は正しくごみ収集であることから、このクラスを防ぐ私のpublic staticフィールドですか?その後

ため、再び同じ質問:

  • public static final
  • private static
  • private static final

あなたの助けのためにもう一度感謝

答えて

1

いいえ、その静的メンバーに問題はありません。ガベージコレクタは、そのオブジェクトに到達する方法がない場合でも、そのオブジェクトに対して作業を実行できます。

Javaのすべてのオブジェクトは、ヒープ上またはスタック上に存在します。オブジェクト は、新しい演算子を使用してヒープ上に作成されます。それから参照番号は です。参照がヌルになるか、またはスコープが (たとえば、ブロックの終わり)から外れると、GCは に再びアクセスしてそのオブジェクトを再要求する方法がないことを認識します。参照が静的変数 にある場合、範囲外になることはありませんが、 をnullまたは別のオブジェクトに設定することはできます。

静的変数は、GCの「ルーツ」として機能します。結果として、明示的にヌルに設定しない限り、プログラムが存続する限り存続し、すべてが到達可能です。

1

号それはもはや使用されたときにあなたのクラスがガベージコレクトすることはできません。その静的フィールドは、クラスを使用するStringではなくStringを使用するクラスです。

関連する問題