web-dev-qa-db-ja.com

Java 8でのMetaSpaceの使用は何ですか?

Java 8.でPermGenをMetaSpaceに置き換えたことは知っています。

  1. MetaSpaceはデフォルトでGCが収集されますか?
  2. PermGenでさえ-XX:+CMSClassUnloadingEnabledのような引数を追加することでGC収集されますが、PermGenよりもMetaSpaceが優れているのは何ですか?
  3. MetaSpaceはネイティブメモリに基づいているため、VMではなくディスク上にJavaオブジェクトを保持しますか?
  4. MetaSpaceでさえメモリ不足になりますか?その場合は、OutOfMemoryExceptionを取得します。
  5. デフォルトでは、MetaSpaceはメモリの増加に伴って成長できますか?

前もって感謝します

52
batman

MetaSpaceはデフォルトでGCが収集されますか?

はい、GCはいっぱいになるとメタスペースで実行され、メタデータに割り当てられたメモリを動的に増加させます(許可されている場合)。

PermGenでさえ、-XX:+ CMSClassUnloadingEnabledのような引数を追加することでGCが収集されますが、MetaSpaceがPermGenより優れているのはなぜですか?

改善は、permgenが実行できなかったメタスペースの動的な拡張によるものです。

MetaSpaceはネイティブメモリに基づいているため、VMではなくディスク上にJavaオブジェクトを保持しますか?

メタスペースの説明に基づいて、ネイティブメモリのみを使用します(ページングは​​行いません)。

Pierre-Hugues Charbonneau( link here )の調査に基づいて、メタスペースの導入は必ずしもOOM問題を解決するものではなく、せいぜい問題の絆創膏であり、動的に試みますメタスペースメモリのサイズを変更して、(ネイティブメモリで許可されている限り)制御不能に成長する可能性のある副作用でロードされるクラスの数に対応します。

MaxMetaspaceSize引数をJVMに設定し、提供されているサンプルプログラムを実行することで、有名なOOMエラーを実現できます。

pierre-Hugues Charbonneauに感謝します。

53
Anantha Sharma

に応じて:

  1. デフォルトでは、メタスペースメモリがMaxMetaspaceSizeに達すると収集されます。このパラメーターは、最初は無制限です。制限は、マシンのメモリです。ただし、クラスとクラスローダーが不要になると、メモリは自動的に解放されます。 ClassLoaderにメモリリークがあると疑われる場合にのみ、このパラメータを調整する必要があります。

  2. MetaSpeceはネイティブメモリを使用し、ポインタを使用したメモリの構成により、GCは古いPermGenメモリよりも高速になります。

  3. いいえ、それはJVMが一般的なCプログラムのようなメモリを使用し、Javaオブジェクトに仮想メモリ空​​間を使用しないことを意味します。メモリはマシンによってのみ制限されるようです。必要に応じて、マシンのメモリをディスクにスワップできること。

  4. パラメーターMaxMetaspaceSizeを設定するとOutOfMemoryを取得でき、このパラメーターを設定しないと、プロセスがすべてのマシンメモリ(スワップ領域を含む)を割り当てる場合に取得できます。

12
Fernando Rincon
  1. MetaSpaceはデフォルトでGCが収集されますか?

    デッドクラスとクラスローダーのガベージコレクションは、クラスメタデータの使用量が「MaxMetaspaceSize」(デフォルトでは"unlimited"そのため、このようなGCの遅延または頻度を制限するには、適切な監視が必要です。

  2. PermGenでさえ、-XX:+ CMSClassUnloadingEnabledなどの引数を追加することでGCが収集されますが、MetaSpaceがPermGenより優れているのはなぜですか?

    主な目標は、permgenを削除することでした。これにより、ユーザーは正しいサイズを検討する必要がなくなりました。

  3. MetaSpaceはネイティブメモリに基づいているため、VMではなくディスク上にJavaオブジェクトを保持しますか?

    ディスクはネイティブメモリではなく、ストレージデバイスです。ネイティブメモリは、このコンテキストでは、エリアであり、Javaヒープから残ったプロセスのメモリです。

  4. MetaSpaceでさえメモリ不足になりますか?

    はい、マシンのメモリ量によって制限されます。

6
Raj