簡體   English   中英

什么是元數據 GC 閾值以及如何調整它?

[英]What is the Metadata GC Threshold and how do I tune it?

在一個應用程序中,我有以下-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]

這個“元數據 GC 閾值”是什么以及如何降低它。 注意:雖然Full GC 花費很長時間進行清理,但實際上並沒有清理多少,也就是說,如果不這樣做會更好。

日志消息告訴 GC 是由元空間分配失敗引起的。 空間保存類元數據。 它們出現在 Java 8 中以取代PermGen

以下是一些調整Metaspaces 的選項。
您可能希望設置以下一個或多個選項:

-XX:MetaspaceSize=100M設置分配的類元數據空間的大小,第一次超過時將觸發垃圾回收;

-XX:InitialBootClassLoaderMetaspaceSize=32M增加引導類加載器Metaspace;

-XX:MinMetaspaceFreeRatio=50使 Metaspaces 增長得更積極;

-XX:MaxMetaspaceFreeRatio=80減少Metaspaces收縮的機會;

-XX:MinMetaspaceExpansion=4M Metaspace 擴展的最小大小;

-XX:MaxMetaspaceExpansion=16M在沒有 Full GC 的情況下擴展元空間的最大大小。

雖然已經有一個公認的答案,但想提一下還有:

-XX:MaxMetaspaceSize=<NNN> where <NNN>是為類元數據分配的最大空間量(以字節為單位)。

也是從這里

一旦類元數據使用量達到“MaxMetaspaceSize”,就會觸發死類和類加載器的垃圾收集。

這篇文章中有一個可用選項列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM