Java 年轻的GC导致元空间增加,而不是老的Gen

Java 年轻的GC导致元空间增加,而不是老的Gen,java,performance,memory-leaks,garbage-collection,jvm,Java,Performance,Memory Leaks,Garbage Collection,Jvm,在从JDK7迁移到JDK8时,我开始看到频繁的完整GC(GC延迟更高)。分析gc后,发现在年轻gc之后,元空间的使用增加,而老gen的使用保持不变。 我已将最大元空间大小(等于JDK7中的Perm Gen)设置为256MB。当使用量达到210 MB左右时,会触发完全GC。我已经尝试将metaspace最大大小设置为512MB,然后我还看到metaspace阈值导致完全GC 为什么年轻的GC会导致元空间大小增长 GC延迟因JDK8而急剧增加。JDK7的GC延迟通常低于100ms,而JDK8的完整G

在从JDK7迁移到JDK8时,我开始看到频繁的完整GC(GC延迟更高)。分析gc后,发现在年轻gc之后,元空间的使用增加,而老gen的使用保持不变。 我已将最大元空间大小(等于JDK7中的Perm Gen)设置为256MB。当使用量达到210 MB左右时,会触发完全GC。我已经尝试将metaspace最大大小设置为512MB,然后我还看到metaspace阈值导致完全GC

为什么年轻的GC会导致元空间大小增长

GC延迟因JDK8而急剧增加。JDK7的GC延迟通常低于100ms,而JDK8的完整GC延迟开始达到800-1000ms。这会影响我的应用程序性能。我使用的是并行GC算法。我怀疑元空间上的GC比旧的gen GC更耗时。任何关于JDK8调优JVM的建议都将非常有用

年轻的GC:

S0     S1     E    O     M      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 
元空间使用216684K,容量262051K,提交262144K,保留262144K
2015-06-30T17:47:16.079+0000:17622.342:[完全GC(元数据GC阈值)[PSYoungGen:9550K->0K(1035776K)]

你能不能拉一些GC日志让我们看一下?请看一下这不会解决问题,但我想你会得到一些提示。从日志中,我们看不到任何完全GC,年轻GC的总时间不到100ms(~20ms)。可能是粘贴错误/日志不够,或者读取错误。这是young GC,显示young GC上的元空间大小增加。还添加了完整的GC日志。这取决于您运行的源,例如,如果生成动态类,然后加载并缓存其实例一段时间,那么如果它几乎到达young Generator,将导致频繁的young GCion的上限和加载的类将保留在元空间中-另请参见