2016-09-14 477 views
1

JVM設置:理解元空間大小

-Xms8192M 
-Xmx8192M 
-XX:NewRatio=1 
-XX:SurvivorRatio=6 
-XX:MetaspaceSize=256M 
-XX:MaxMetaspaceSize=512M 

jstat的輸出是gccapacity的

S0C S1C S0U S1U  EC  EU  OC   OU  MC  MU CCSC CCSU YGC  YGCT FGC FGCT  GCT 
524288.0 524288.0 0.0 231108.3 3145728.0 2926008.3 4194304.0 73553.2 58624.0 56981.2 8960.0 8619.0  5 0.684 1  0.235 0.919 

輸出是

NGCMN NGCMX  NGC  S0C S1C  EC  OGCMN  OGCMX  OGC   OC  MCMN  MCMX  MC  CCSMN CCSMX  CCSC YGC FGC 
4194304.0 4194304.0 4194304.0 218624.0 208896.0 3766784.0 4194304.0 4194304.0 4194304.0 4194304.0  0.0 1099776.0 59136.0  0.0 1048576.0 8960.0  26  1 

在這兩種元空間的上述輸出大小約爲56M甚至儘管最小metaspaceSize被定義爲256m

+0

'-XX:MetaspaceSize = 256M' does * not *配置最小尺寸。它甚至沒有配置任何類型的實際大小。 – Holger

+0

那是什麼意思。有沒有辦法讓我強制實施元空間大小?目前metaspace的大小利用率達到了90%,這是不是很糟糕?任何方式來避免它? – noob

+2

請參閱[高級垃圾收集選項](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABFAFAE):'-XX:MetaspaceSize = size':*設置第一次超出時將觸發垃圾回收的分配的類元數據空間的大小。垃圾收集的閾值根據所使用的元數據量而增加或減少*因此,此選項僅指定觸發垃圾回收的閾值,它甚至可能會在之後進行更改。沒有理由擔心使用。必要時會增加尺寸。 – Holger

回答

0

您需要關閉UseCompressedClassPointers這將在元空間中創建空間。