アプリで多くの静的変数を使用しています。私の質問は、アプリを終了しても、それらはまだメモリ内にあるのでしょうか..? はいの場合、どうすればこれを修正できますか。前もって感謝します。
9 に答える
ClassLoader によってクラスがロードされると静的変数がロードされ、アンロードされると削除されます。
この質問の次の読者のために-
誰もが答えで言ったように、静的変数はクラス変数です。クラスが JVM からアンロードされなくなるまで、それらはメモリ内に残ります。
Android では、アプリケーションを閉じても完全に閉じないことがわかりました. 最近のアプリケーション スタックに残ります. ホーム ボタンを長押しすることで確認できます (ほとんどのデバイスで).
Android itself kicked out those recent apps when the other app needs memory
Android では、次の場合に静的変数がアンロードされます。
-You force stop your app.
-Application crashes.
-You clear your app data.
-Switch off your Device.
-Android kicked out recent app
静的変数は、クラスが JVM にロードされている限り存続します。JVM で実行されているクラスのインスタンスがなくなると、クラスはアンロードされ、静的変数はガベージ コレクションの対象になります。
他の回答に加えて、それらの静的「変数」が実際に「静的最終」プリミティブ定数である場合、それらは実際には個別のエンティティとしてまったく存在しませんが、それらの値は使用するすべてのクラスに正しくコンパイルされることに注意してくださいそれら (それらを定義するものだけではありません)。
静的変数はクラスに関連付けられており、クラスがメモリ内にある限り存続します (アプリケーションが終了すると存在しなくなります)。
場合によっては、すべてのオブジェクトに共通の変数が必要になることがあります。これは、static modifier
. Fields that have the static modifier in their declaration are called static fields or class variables
. They are associated with the class, rather than with any object
. Every instance of the class shares a class variable, which is in
メモリ内の 1 つの固定位置。どのオブジェクトでもクラス変数の値を変更できますが、クラスのインスタンスを作成せずにクラス変数を操作することもできます。
インスタンスが使用されていない場合、ガベージ コレクターはインスタンスを破棄します。これは、インスタンスがメモリから消去されることを意味します。
アプリで多くの静的変数を使用しています。
静的変数は自動メモリ管理の影響を受けないため、メソッド (Android)でそれらをnullに設定する必要があります。それらは確かにクラスに属しており、 @ Jigar JoshionDestroy
が指摘したとおりに機能します。
静的変数はクラス変数と呼ばれ、クラスがロードされたときにロードされ、クラスがアンロードされたときにアンロードされます。たとえば、次のようなクラス変数
private int classinVar;
クラスがロードされると、デフォルト値で自動的に初期化されます。同じ概念は、サインアウトを取得したときにサインアウトを使用すると、そのクラスは静的フィールドでコンテキストから外れます。
C/C++ の場合で、ガベージを収集しなかった場合は、メモリ管理プログラムを使用する必要があります。java の場合は、メモリからすべての「javaw」プログラムを閉じ、jvm を閉じます。