1

非静的マップを持つシングルトン オブジェクトがあるかどうかを知りたいだけです。マップ内のオブジェクトが、ヒープではなく空間をパージェムする理由。Map pergem 空間内のオブジェクトのインターセッションが増加していることを Visual VM から確認できます。

私が知っていたのは、静的変数のみであり、クラスは pergem スペースに移動し、残りのすべてのオブジェクトはヒープに移動する必要があります。

これは、シングルトン オブジェクトが静的であるため、参照がヒープを指しているが、pergem でサイズを保持しているシングルトン パターンのためですか?

この場合、この問題の解決策は何ですか。

4

1 に答える 1

1

あなたの問題に対する答えは: はい。具体的には、静的変数から直接的または間接的にオブジェクトを参照するたびに[1]、そのオブジェクトはガベージ コレクションできず、最終的に permgen に送られます。

解決策は、シングルトンを使用しないことです。ただし、質問に基づいて、実際の問題はハッシュマップが成長し続けることであるため、これで問題が実際に解決されるわけではありません。これを何らかの形式のキャッシュとして使用している場合は、時間またはサイズのいずれかでキャッシュに何らかの有効期限を設定する必要もあります。そうしないと、OOM を取得するまで成長し続けます。

[1] 多かれ少なかれ真実ですが、特定のクラスローダのトリックが存在する場合、これは正しくない可能性があります。

于 2013-10-16T21:36:17.880 に答える