2016-09-14 470 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这将在元空间中创建空间。