Java静的クラスのガベージコレクションはどのように行われますか?
静的オブジェクトを含む静的クラスがあります。オブジェクトを null に設定すると、ガベージ コレクションが行われます。静的クラスのライフサイクルがわかりません。プログラムが閉じたときにガベージコレクションされますか?
静的オブジェクトは、クラス インスタンスではなく、クラス定義に結び付けられます。
クラスがClassLoader を介してロードされるとすぐに有効になり、クラスがアンロードされたときにのみ破棄されます。
静的クラスは常にアクセス可能であるため、ガベージ コレクションは行われません。
ここで、静的クラスに非静的クラスのフィールドとインスタンスがあり、それが null に設定されている場合、そのオブジェクトが参照されなくなるため、そのメモリは解放されます。
例えば
public static StaticClass
{
public static InstanceClass myInstanceClass;
}
null に設定myInstanceClass
すると、ガベージ コレクションが実行されます。
- static
クラスは、パッケージ レベルではなく、クラス レベルでのみ可能static inner classes
です。またはと言えTop level classes
ます。
-次にstatic
、クラスがクラスローダーによってロードされます。
-クラスは、それをロードしたローダーがまだ実行されているか、ローダーによってアンロードされない限りstatic
、メモリに保持されます。
次のように考えてください。
すべてのオブジェクトには、そのクラスへの参照があります。
すべてのクラスには、そのクラス ローダーへの参照があります。
すべてのクラスローダーは、これまでにロードしたすべてのクラスへの参照を持っています。
この混乱したボール全体がゴミになる可能性があります。これは、アプリのアンロード/再ロード (サーブレット コンテナー内) の基礎です。ただし、参照されているオブジェクトが 1 つでもあると、クラス ローダーとそのすべてのクラスをアンロードできないため、アプリのアンロードを実現するのは簡単ではありません。