web-dev-qa-db-ja.com

メタデータGCのしきい値とは何ですか?また、どのように調整しますか?

アプリケーションでは、次の-verbose:gc

[GC (Metadata GC Threshold)  8530310K->2065630K(31574016K), 0.3831399 secs]
[Full GC (Metadata GC Threshold)  2065630K->2053217K(31574016K), 3.5927870 secs]
[GC (Metadata GC Threshold)  8061486K->2076192K(31574016K), 0.0096316 secs]
[Full GC (Metadata GC Threshold)  2076192K->2055722K(31574016K), 0.9376524 secs]
[GC (Metadata GC Threshold)  8765230K->2100440K(31574016K), 0.0150190 secs]
[Full GC (Metadata GC Threshold)  2100440K->2077052K(31574016K), 4.1662779 secs]

これは何ですか "Metadata GC threshold"およびそれを減らす方法。注:Full GCはクリーンアップに長い時間を費やしますが、実際には多くのクリーンアップを行います。つまり、これを行わなかった方が良いでしょう。

33
Peter Lawrey

ログメッセージは、GCがMetaspace割り当てエラーによって引き起こされたことを示しています。 メタスペースはクラスのメタデータを保持します。 登場しました Java 8で置き換えるPermGen

ここにあります 調整するいくつかのオプションメタスペース
次のオプションの1つまたは複数を設定できます。

-XX:MetaspaceSize=100M最初に超過したときにガベージコレクションをトリガーする、割り当てられたクラスメタデータスペースのサイズを設定します。

-XX:InitialBootClassLoaderMetaspaceSize=32Mブートクラスローダーのメタスペースを増やす。

-XX:MinMetaspaceFreeRatio=50メタスペースをより積極的に成長させるため。

-XX:MaxMetaspaceFreeRatio=80メタスペースが縮小する可能性を減らすため。

-XX:MinMetaspaceExpansion=4Mメタスペースが拡張される最小サイズ。

-XX:MaxMetaspaceExpansion=16M Full GCなしでメタスペースを拡張する最大サイズ。

43
apangin

すでに受け入れられている答えがありますが、次のようなものもあることを述べたいと思います。

-XX:MaxMetaspaceSize=<NNN> where <NNN>は、クラスメタデータに割り当てる最大容量(バイト単位)です。

また here から

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

利用可能なオプションのリストがあります この投稿

13
Ravindra HV