JDK 8をインストールしてEclipseを実行しようとしました。次のような警告メッセージが表示されます。
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
このVMオプションを無視した理由は何ですか?
これらの議論を無視する理由は、恒久的な生成がJDK 8のためのHotSpotで削除されたためです。
Permanent Generation(PermGen)スペースは完全に削除され、Metaspaceと呼ばれる新しいスペースに置き換えられました。 PermGenを削除した結果、JVMの引数およびMaxPermSizeは無視され、Java.lang.OutOfMemoryErrorが返されることはありません。 :PermGenエラー.
メタスペースの利点
メタスペースチューニング
最大メタスペースサイズは、-XX:MaxMetaspaceSizeフラグを使用して設定できます。デフォルトは無制限です。つまり、システムメモリのみが制限されます。 -XX:MetaspaceSizeチューニングフラグは、メタスペースの初期サイズを定義します。このフラグを指定しない場合、Metaspaceは実行時のアプリケーションの要求に応じて動的にサイズ変更されます。
変更は将来的に他の最適化と機能を可能にします
改善されたGC性能もあります。 詳細
これは、Java 8の新機能の1つであり、 JDK拡張提案122 の一部です。
Hotspot JVMからパーマネントジェネレーションを削除して、パーマネントジェネレーションのサイズを調整する必要性を取り除きます。
Java 8に含まれる予定のすべてのJEPのリストは、 JDK8マイルストーンページ にあります。
Permanent Generation(PermGen)スペースは完全に削除され、Metaspaceと呼ばれる新しいスペースに置き換えられました。PermGen削除の結果、明らかにPermSizeおよびMaxPermSize JVM引数が無視され、Java.lang.OutOfMemoryError
:PermGenエラーが発生することはありません。 。 JDK 8 HotSpot JVMは現在、クラスメタデータの表現にネイティブメモリを使用しており、メタスペースと呼ばれています。続きを読む>>
PermGenスペースが削除されたため。メモリ管理は少し変わりました。
Java 8では、PermGenスペースはMetaSpaceに置き換えられました。PermSizeおよびMaxPermSize JVM引数は無視され、起動時に存在する場合は警告が発行されます。
クラスメタデータのほとんどの割り当ては、ネイティブメモリから割り当てられるようになりました。 *クラスメタデータを記述するために使用されていたクラスは削除されました。
古いPermGenと新しいMetaSpaceの主な違いは、メモリ使用量の上限を定義する必要がないことです。 MetaSpaceのスペース制限を無制限にすることができます。したがって、メモリ使用量が増えても、OutOfMemoryErrorエラーは発生しません。代わりに、予約されたネイティブメモリが増加したメモリ使用量をいっぱいにするために増加されます。
MetaSpaceの最大スペース制限を定義すると、OutOfMemoryError:Metadata spaceがスローされます。したがって、メモリの無駄を避けるために、この制限を慎重に定義することが重要です。
Java 8のためのOracleのJVM実装はPermGenモデルを取り除き、 Metaspace に置き換えました。