2回复
2年前
为什么GC日志里新生代的大小比Xmn要小
昨天发现了一个比较奇怪的现象,为什么明明设置了Xmn的具体大小,但是从GC日志看却比这个小,这是为什么呢
public class GCTest {
public static void main(String args[]) {
while(true) {
byte[] b = new byte[1024];
}
}
}
JVM参数如下:
-Xmx200M -Xmn60M -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails
打印的GC日志如下:
[GC[ParNew: 49152K->265K(55296K), 0.0018670 secs] 49152K->265K(198656K), 0.0019080 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC[ParNew: 49417K->315K(55296K), 0.0012820 secs] 49417K->315K(198656K), 0.0013050 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC[ParNew: 49467K->320K(55296K), 0.0013820 secs] 49467K->320K(198656K), 0.0014070 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC[ParNew: 49472K->290K(55296K), 0.0014840 secs] 49472K->290K(198656K), 0.0015120 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
从上面GC日志看,新生代的大小为55296K,而我设置了60M,这是为什么呢
4095 阅读
新生代的大小应该是eden+form+to 的总大小,我按照你的参数试了下
eden space 49152K,
from space 6144K,
to space 6144K,加起来就是61440 也就是60M
而日志里打印的新生代大小应该是eden+一个survivor,也就是新生代可用的内存空间大小