2

Webサイトを作成しようとしていますが、PermGen例外が発生することがあります。
そこで、作成するオブジェクトの量を減らし、メモリ消費を減らす方法を探し始めました。

いくつかの記事を読みました。しかし、私はいくつかのことについてよくわかりません。
たとえば、メソッドの外部(グローバル)でリストを宣言するのが良いですか、それともメソッドの内部でリストを作成するのが良いですか?この場合のメモリ消費量の違いは何ですか?それらをローカルとして宣言すると、使用後にガベージコレクターがそれらを収集し、ヒープのスペースを解放することを意味しますか?

誰かがより多くのメモリ消費を減らし、作成されたオブジェクトの量を減らす方法を提案できますか(@Autowiredはオブジェクトで宣言するためのより良い方法ですか)?

4

4 に答える 4

5

PermGen に関してメモリ不足の例外が発生した場合、オブジェクトの数とサイズを減らしても解決しない可能性が高くなります (オブジェクトは PermGen ではなくヒープのスペースを占有するため)。

この回答PermGen のメモリ不足の理由は、PermGen の問題の原因を解決するのに役立ちます

于 2012-07-13T15:36:43.287 に答える
3

グローバル変数とローカル変数はどちらも同じ量のメモリを使用します。違いは、スコープ外に出て、gargabeコレクションの対象になる場合です。グローバル変数はスコープ外にはなりませんが、ローカル変数は「ブロック」(メソッドやループなど)が終了するとすぐにスコープ外になります。現在この変数への参照がない場合、ガベージコレクターによって削除されます。

経験則として、変数は常に可能な限り低いスコープに配置しようとします。これにより、変数が使用されなくなったときに変数が解放されます。可能であれば、変数も再利用するようにしてください。

これはスコープに関する小さな記事です。1つはJavaガベージコレクターのしくみについて、もう1つはどの種類のコレクターを使用するかについてです。

于 2012-07-13T15:32:19.177 に答える
1

使用に関して、静的データと非静的データの間に違いはありません。ヒープで同じ量を使用します。

PermGen が不足している場合は、次のいずれかを行う必要があります。

  1. クラスのロードを減らす
  2. PermGen の最大サイズを増やします。-XX:MaxPermSize=256m
于 2012-07-13T15:27:19.187 に答える
0

すべてのローカル変数は、宣言のブロックが終了するとすぐにガベージコレクターから収集できます。したがって、これはメモリのリサイクルに適した方法です。

于 2012-07-13T15:32:43.087 に答える