jvm不会young GC,s0/s1不会被使用而且大多数实例都是字符串,如何优化?
jvm won't young GC, s0/s1 won't be used and most instance are strings, how to optimize?
我有一个配置了堆 space 大小 s0:s1:Eden = 2:2:8
的 glassfish。而且我发现jvm不会young 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
我认为young gc不会执行的原因是:要保持活动的实例大小大于S0/S1
大小,
所以我转储了堆,发现大多数实例是 String
或 char[]
那么我该如何优化呢?
如果旧 space 已满(您的情况),则跳过年轻 GC。
S0/S1 无关紧要。
增加旧 space GC 将正常运行。
我有一个配置了堆 space 大小 s0:s1:Eden = 2:2:8
的 glassfish。而且我发现jvm不会young 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
我认为young gc不会执行的原因是:要保持活动的实例大小大于S0/S1
大小,
所以我转储了堆,发现大多数实例是 String
或 char[]
那么我该如何优化呢?
如果旧 space 已满(您的情况),则跳过年轻 GC。
S0/S1 无关紧要。
增加旧 space GC 将正常运行。