理解元空间大小
问题描述:
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
答
您需要关闭UseCompressedClassPointers
这将在元空间中创建空间。
'-XX:MetaspaceSize = 256M' does * not *配置最小尺寸。它甚至没有配置任何类型的实际大小。 – Holger
那是什么意思。有没有办法让我强制实施元空间大小?目前metaspace的大小利用率达到了90%,这是不是很糟糕?任何方式来避免它? – noob
请参阅[高级垃圾收集选项](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABFAFAE):'-XX:MetaspaceSize = size':*设置第一次超出时将触发垃圾回收的分配的类元数据空间的大小。垃圾收集的阈值根据所使用的元数据量而增加或减少*因此,此选项仅指定触发垃圾回收的阈值,它甚至可能会在之后进行更改。没有理由担心使用。必要时会增加尺寸。 – Holger