238

JDK 8 をインストールし、Eclipse を実行しようとしています。次の警告メッセージが表示されます。

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 

この VM オプションを無視する理由は何ですか?

4

6 に答える 6

370

これらの引数を無視する理由は、次の欠点があるため、JDK8 の HotSpot で永続的な世代が削除されたためです。

  • 起動時の固定サイズ – 調整が難しい。
  • 内部ホットスポット タイプは Java オブジェクトでした。完全な GC で移動でき、不透明で、厳密に型指定されておらず、デバッグが難しく、メタメタデータが必要でした。
  • 完全なコレクションを簡素化: 各コレクターのメタデータ用の特別な反復子
  • GC の一時停止中ではなく、同時にクラス データの割り当てを解除したい
  • PermGen によって制限されていた将来の改善を有効にします。

Permanent Generation (PermGen) スペースは完全に削除され、Metaspace と呼ばれる新しいスペースに置き換えられました。PermGen を削除した結果、明らかにPermSize および MaxPermSize JVM 引数が無視され、java.lang.OutOfMemoryError: PermGen エラーが発生することはありません。

メタスペースの利点

  • Java 言語仕様プロパティを利用する: クラスと関連するメタデータの有効期間は、クラス ローダーのものと一致します。
  • ローダーごとのストレージ領域 – メタスペース
  • 線形配分のみ
  • 個別の再利用はありません (RedefineClasses とクラスの読み込みの失敗を除く)
  • GC スキャンまたは圧縮なし
  • メタスペース オブジェクトの再配置なし

メタスペースのチューニング

最大メタスペース サイズは -XX:MaxMetaspaceSize フラグを使用して設定できます。デフォルトは無制限です。つまり、システム メモリのみが制限されます。-XX:MetaspaceSize チューニング フラグは、メタスペースの初期サイズを定義します。このフラグを指定しない場合、実行時のアプリケーションの要求に応じてメタスペースのサイズが動的に変更されます。

変更により、将来的に他の最適化と機能が有効になります

  • アプリケーション クラスのデータ共有
  • 若いコレクションの最適化、G1 クラスのアンロード
  • メタデータ サイズの削減と内部 JVM フットプリント プロジェクト

GC パフォーマンスも向上しています。詳細

于 2014-03-19T14:55:16.243 に答える
21

Permanent Generation (PermGen) スペースは完全に削除され、Metaspace と呼ばれる新しいスペースに置き換えられました。PermGen を削除した結果、明らかに PermSize および MaxPermSize JVM 引数が無視され、PermGenjava.lang.OutOfMemoryErrorエラーが発生することはありません。 JDK 8 HotSpot JVM は、クラス メタデータの表現にネイティブ メモリを使用するようになり、Metaspace と呼ばれます。 続きを読む>>

于 2014-04-30T13:04:02.410 に答える
17

PermGen スペースが削除されたためです。メモリ管理が少し変更されました。

java-8-permgen-メタスペース

于 2013-08-20T16:00:23.373 に答える
10

Java 8 用の Oracle の JVM 実装では、PermGen モデルが取り除かれ、Metaspaceに置き換えられました。

于 2013-08-20T15:59:48.753 に答える