JDK 8 での PermGen の削除: VM オプションが無視される理由
はじめに
JDK 8 の導入永続世代 (PermGen) の削除を含む、Java 仮想マシン (JVM) アーキテクチャへの大幅な変更。この変更は、Eclipse および他のアプリケーションが JVM と対話する方法に影響を与えました。
問題
JDK 8 で Eclipse を実行すると、MaxPermSize が設定されていないことを示す警告メッセージが表示される場合があります。 VM オプションは無視されます。このメッセージは、このパラメータを破棄する理由について疑問を引き起こします。
MaxPermSize を無視する理由
MaxPermSize VM オプションを無視する理由は、PermGen に関連するいくつかの欠点に起因します。以前の JDK バージョン:
-
固定サイズ: PermGen は起動時に固定サイズを持っていたため、動的クラス読み込みが必要なアプリケーションのメモリ割り当てを最適化することが困難でした。
-
内部ホットスポット タイプ: PermGen に保存されているオブジェクトは Java オブジェクトであり、ガベージ コレクション間での永続性によりメモリ リークの可能性がありました。
-
単純化されたコレクション: PermGen の削除は許可されていますフル ガベージ コレクション サイクルを簡素化し、メタデータ用の特別なイテレータの必要性を排除します。
-
同時クラス データ割り当て解除: MetaSpace により、GC 一時停止以外でクラス データの割り当て解除を同時に実行できるようになり、パフォーマンスが向上します。 .
-
将来の改善点: PermGen の廃止により、以前は制約によって制限されていた将来の JVM の改善と最適化への道が開かれます。
メタスペース:置き換え
JDK 8 では、PermGen は Metaspace に置き換えられました。これにはいくつかの利点があります。
-
クラス ローダー アフィニティ: メタスペースは特定のクラス ローダー。クラスの有効期間が対応するローダーのライフサイクルと一致するようにします。
-
線形割り当て: メタスペースは線形割り当てを使用し、メモリ管理を簡素化します。
-
いいえ個別の再利用: メタスペースは、クラスの再定義と読み込みの失敗を除き、個別の再利用を実行しないため、オーバーヘッドがさらに削減されます。
-
GC スキャンまたは圧縮なし: メタスペース オブジェクトはスキャンまたは圧縮されません。ガベージ コレクション サイクル中に、パフォーマンスが向上します。
-
最適化されたチューニング: メタスペースは、-XX:MaxMetaspaceSize フラグと -XX:MetaspaceSize フラグを使用して調整でき、より柔軟なメモリ管理が可能になります。
結論
JDK 8 で PermGen が削除されたことにより、Java アプリケーションのパフォーマンスと安定性が大幅に向上しました。 MaxPermSize VM オプションはもう関係ありませんが、Metaspace はアプリケーションのメタデータを処理するための高度に最適化された効率的なソリューションを提供します。
以上がMaxPermSize VM オプションが JDK 8 で無視されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。