2

Java静的クラスのガベージコレクションはどのように行われますか?

静的オブジェクトを含む静的クラスがあります。オブジェクトを null に設定すると、ガベージ コレクションが行われます。静的クラスのライフサイクルがわかりません。プログラムが閉じたときにガベージコレクションされますか?

4

4 に答える 4

4

静的オブジェクトは、クラス インスタンスではなく、クラス定義に結び付けられます。

クラスがClassLoader を介してロードされるとすぐに有効になり、クラスがアンロードされたときにのみ破棄されます。

于 2012-11-19T20:21:44.470 に答える
1

静的クラスは常にアクセス可能であるため、ガベージ コレクションは行われません。

ここで、静的クラスに非静的クラスのフィールドとインスタンスがあり、それが null に設定されている場合、そのオブジェクトが参照されなくなるため、そのメモリは解放されます。

例えば

public static StaticClass
{
    public static InstanceClass myInstanceClass;
}

null に設定myInstanceClassすると、ガベージ コレクションが実行されます。

于 2012-11-19T20:20:11.367 に答える
1

- staticクラスは、パッケージ レベルではなく、クラス レベルでのみ可能static inner classesです。またはと言えTop level classesます。

-次にstatic、クラスがクラスローダーによってロードされます。

-クラスは、それをロードしたローダーがまだ実行されているか、ローダーによってアンロードされない限りstatic、メモリに保持されます。

于 2012-11-19T20:32:08.143 に答える
1

次のように考えてください。

すべてのオブジェクトには、そのクラスへの参照があります。

すべてのクラスには、そのクラス ローダーへの参照があります。

すべてのクラスローダーは、これまでにロードしたすべてのクラスへの参照を持っています。

この混乱したボール全体がゴミになる可能性があります。これは、アプリのアンロード/再ロード (サーブレット コンテナー内) の基礎です。ただし、参照されているオブジェクトが 1 つでもあると、クラス ローダーとそのすべてのクラスをアンロードできないため、アプリのアンロードを実現するのは簡単ではありません。

于 2012-11-19T20:35:57.103 に答える