年轻的GC导致Metaspace增加,而不是Old Gen

从JDK7迁移到JDK 8时,我开始看到频繁的Full GC(具有更高的GC延迟)。 在分析了gc之后,发现在年轻的GC之后,元空间的使用增加了,而旧的使用率仍然相同。 我已将最大元空间大小(等于JDK7中的Perm Gen)设置为256MB。 当使用率达到210 MB左右时,将触发完整的GC。 我已经尝试将元空间最大大小设置为512MB,然后我也看到Metaspace Threshold导致Full GC。

为什么Young GC会导致元空间大小增长?

JDK8引发了GC延迟。 使用JDK7,GC延迟通常低于100毫秒,而使用JDK8的全GC启动时间为800-1000毫秒。 这会影响我的应用程序性能。 我正在使用并行GC算法。 我怀疑在metaspace上的GC比Old gen GC要耗费更多时间。 有关为JDK8调优JVM的任何建议都将非常有用。

年轻的GC:

S0 S1 EOM CCS YGC GCT FGC FGCT GCT LGCC GCC 0.00 40.28 99.78 21.95 56.28 - 149 6.647 2 3.276 9.924 Allocation Failure No GC 54.17 0.00 0.66 21.95 57.63 - 150 6.661 2 3.276 9.937 Allocation Failure No GC 

全GC:

 0.00 72.80 0.00 25.15 82.51 - 213 8.550 3 3.276 11.826 Metadata GC Threshold Metadata GC Threshold 0.00 72.80 0.00 25.15 82.51 - 213 8.550 3 3.276 11.826 Metadata GC Threshold Metadata GC Threshold 

Metaspace使用216684K,容量262051K,承诺262144K,保留262144K 2015-06-30T17:47:16.079 + 0000:17622.342:[全GC(元数据GC阈值)[PSYoungGen:9550K-> 0K(1035776K)]