-XX:MaxPermSizeは何をしますか?


260

具体的には、なぜPermGen OutOfMemoryErrorの問題を解決するのに役立つのですか?

また、JVM引数に関するドキュメントを私に示す回答に対するボーナスポイント...



6
oracle.com/technetwork/java/javase/tech/…これらのボーナスポイントはどのようにしてくれますか?:)
DenysSéguret2012

1
@PaulTomblinあなたがリンクしている記事の人(Googleによる最初の結果)が彼が何について話しているのかわからない。
DenysSéguret2012

@dystroyクッキーを送ってもいいですか?または、よく回答された質問に満足することもできます;)
Geoff

5
これは具体的な質問の答えにはなりませんが、JVMのメモリ管理を調べている場合、私が読んだ最高の記事はこれとこのinfoqリンクです
阿部

回答:


274

永続スペースには、VMが使用するクラス、メソッド、内部化された文字列、および同様のオブジェクトが格納され、割り当てが解除されることはありません(そのため、名前が付けられます)。

このOracleの記事では、HotSpot GCの機能とパラメーター化について簡潔に説明し、多くのクラスをロードする場合は、このスペースを増やすことをお勧めします(これは通常、アプリケーションサーバーやEclipseなどのIDEの場合です)。

永続的な世代は、ほとんどのアプリケーションのガベージコレクタのパフォーマンスに顕著な影響を与えません。ただし、一部のアプリケーションは多くのクラスを動的に生成してロードします。たとえば、JavaServer Pages(JSP)ページのいくつかの実装。これらのアプリケーションでは、追加のクラスを保持するために、より大きな永続的な世代が必要になる場合があります。その場合、コマンドラインオプション-XX:MaxPermSize =を使用して、永続的な最大生成サイズを増やすことができます。

なお、この他のOracleのドキュメントのリストが他のHotSpot引数。

更新: Java 8以降、permgenスペースとこの設定の両方がなくなりました。ロードされたクラスとメソッドに使用されるメモリモデルは異なり、制限はありません(デフォルト設定)。このエラーは表示されなくなります。


93

-XX:PermSize -XX:MaxPermSize 永続的な世代のサイズを設定するために使用されます。

永続的な世代:永続的な世代は、クラスファイルが保持される場所です。これらは、コンパイルされたクラスとJSPページの結果です。このスペースがいっぱいになると、フルガベージコレクションがトリガーされます。フルガベージコレクションが参照されていない古いクラスを削除できず、永続スペースを拡張する余地がない場合、メモリ不足エラー(OOME)がスローされ、JVMがクラッシュします。


48

Java 8では、このパラメーターは通常、次のような警告メッセージを出力するために使用されます。

Java HotSpot(TM)64ビットサーバーVM警告:オプションMaxPermSize = 512mを無視します。サポートは8.0で削除されました

Java 8でこのメッセージが表示される理由は、PermGenのいくつかの欠点に対処するためにPermgenがMetaspaceに置き換えられたためです(ご存じのとおり、これらの欠点の1つは、サイズが固定されていることです)。

FYI:メタスペースに関する記事:http ://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


6
参照:JDK 8でのPermGenの削除(stackoverflow)。
意志
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.