我有一个配置了堆空间大小s0:s1:Eden = 2:2:8
的glassfish。我发现jvm不会年轻的gc
(! 22958)-> jstat -gc 1398 1000 100
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
33792.0 19456.0 0.0 0.0 108544.0 108544.0 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34932 20945.828 22156.612
33792.0 19456.0 0.0 0.0 108544.0 101252.3 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34932 20946.499 22157.282
33792.0 19456.0 0.0 0.0 108544.0 108544.0 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34933 20946.499 22157.282
33792.0 19456.0 0.0 0.0 108544.0 108544.0 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34934 20947.106 22157.890
33792.0 19456.0 0.0 0.0 108544.0 74357.8 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34935 20948.298 22159.082
33792.0 19456.0 0.0 0.0 108544.0 90966.8 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34935 20948.298 22159.082
33792.0 19456.0 0.0 0.0 108544.0 96473.6 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34935 20948.298 22159.082
33792.0 19456.0 0.0 0.0 108544.0 100628.3 349184.0 348941.2 173568.0 173422.5 92634 1210.784 34935 20948.298 22159.082
我相信为什么年轻的gc不会被预先形成:保持活着大小的实例大于S0/S1
大小,
所以我转储堆并发现大多数实例是String
或char[]
那么如何优化呢?
答案 0 :(得分:2)
如果旧空间已满,则跳过年轻的GC(这是您的情况)。
S0 / S1无关紧要。
增加旧空间,GC将正常运行。