PermGenとMetaspaceの違いは何ですか?


118

Java 7までは、JVM がクラスを保持するために使用していたPermGenと呼ばれる領域がJVMメモリにありました。Java 8、それを除去し、と呼ばれる領域に置き換えメタスペース

PermGenとメタスペースの最も重要な違いは何ですか?

私が知っている唯一の違いは、java.lang.OutOfMemoryError: PermGen spaceもうスローできず、VMパラメータMaxPermSizeが無視されることです。



@ the8472ええ、でもこれ(と他の多く)のgoogleの結果はメタスペースのメカニズムのみを説明しており、これとPermGenの正確な違いについては何も触れていません。
花王

回答:


137

ユーザーの観点からの主な違い-前の回答では十分に強調されていないと思います- メタスペースはデフォルトで自動的にサイズを(基盤となるOSが提供するものまで)増やしますが、PermGenは常に最大サイズを固定しています。JVMパラメータを使用してメタスペースの固定最大値を設定できますが、PermGenを自動増加させることはできません。

大体それは単なる名前の変更です。これ-戻るPermGenを導入した場合、一切のJava EEまたは動的クラス(UN)のロード、クラスがロードされた後、JVMがシャットダウンするまで、それがメモリ内に立ち往生してなかった常設生成が。現在、クラスはJVMの存続期間中にロードおよびアンロードされる可能性があるため、メタスペースは、メタデータが保持される領域にとってより意味があります。

どちらにもjava.lang.Classインスタンスが含まれており、どちらもClassLoaderリークの影響を受けます。唯一の違いは、メタスペースのデフォルト設定では、症状に気づくまでに時間がかかるということです(自動で可能な限り大きくなるため)。つまり、解決せずに問題をさらに先に進めるだけです。OTOH OSメモリが不足した場合の影響は、JVM PermGenが不足した場合よりも深刻になる可能性があると思います。

JVMをPermGenとメタスペースのどちらで使用していても、動的なクラスのアンロードを実行している場合は、たとえば、ClassLoader Leak Preventionライブラリを使用するなどして、クラスローダーのリークに対する対策を講じる必要があります


17
PermgenもMetaspaceもクラスClassのインスタンスを含みません。ロードされたクラスに関するメタ情報のみを保持します。クラスClassのインスタンスは、他のクラスのインスタンスと同様に、通常のヒープに保持されます。
平均ジョー

いい比較です。ありがとう
Sandeep

1
ちなみに、OTOHは「もう一方の手」を意味します
sofs1

43

さようなら、さようならPermGen、こんにちはメタスペース

PermGenは完全に削除されました。

メタスペースガベージコレクション -クラスのメタデータの使用量がに達すると、デッドクラスとクラスローダーのガベージコレクションがトリガーされMaxMetaspaceSizeます。

Metadata保持されていたスペースはに隣接しなくなりJava heapmetadataはネイティブメモリからと呼ばれる領域に移動しましたMetaspace

簡単な言葉で

クラスメタデータはネイティブメモリから割り当てられるため、利用可能な最大領域は利用可能なシステムメモリの合計です。したがって、もはや遭遇することはなく、OOM errors最終的にスワップスペースにこぼれる可能性があります。

の削除はPermGen、クラスローダーのリークの問題がなくなったことを意味しません。したがって、はい、リークは最終的にネイティブメモリ全体を消費するため、消費量を監視し、それに応じて計画する必要があります。

分析といくつかの他の記事、:リンク1リンク2、およびこの


6
MaxPermGenの代わりにMaxMetaspaceSizeがあるので、メモリの使用量が増えたり少なくなったり、制御が弱くなる理由はありません。
Peter Lawrey 2014年

2
ここで何の話をしているの?RAMメモリまたはHDDメモリ。
Dinesh

1
@Dinesh RAM(内部メモリ)
Aditya Gupta

10

つまり、制限されていない場合、クラスメタデータをロードする必要があるため、ネイティブメモリではメタスペースサイズが自動的に増加します。 -XX:MaxMetaspaceSize

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.