Java 7相比Java 6在年轻代垃圾收集方面暂停时间更长

7
我注意到,每个使用Java 7的年轻垃圾回收器平均比Java 6多花费10毫秒。我使用的是1.6.0_311.7.0_21。配置没有变化,硬件也没有变化,JVM参数如下:
-server -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+TieredCompilation -XX:+AggressiveOpts -Xms1g -Xmx1g -XX:MaxNewSize=256m -XX:NewSize=256m
  • Java 7:
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
26176.0 26176.0 3531.6  0.0   209792.0 21648.8   786432.0   86777.6   49472.0 49350.1     82    1.830   0      0.000    1.
  • Java 6
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
26176.0 26176.0  0.0   1210.5 209792.0 95873.4   786432.0   65327.1   35968.0 35891.2     83    0.620   0      0.000    0.620

我还查看了每个单独的时间,使用Java 6,每个YGC需要约10ms,而Java 7则需要20ms。在版本6和7之间有什么改变可以解释这种行为吗?

编辑:我注意到Java 7运行在64位模式下,而Java 6使用32位JVM,这可能解释了差异吗?

谢谢


我怀疑默认情况下Eden和Young Generation的大小不同,这可能会改变这种行为。你能打印出实际的大小吗? - Peter Lawrey
不同的算法或不同的参数。 - Hot Licks
1个回答

2

Java 6的默认-XX:NewRatio8,但Java 7的默认值是2。因此,在Java 6中,年轻代的大小比Java 7小,这就是我感到的差异。

由于从城市收集垃圾的时间与城市的大小成正比,如果城市的大小增加,时间也会相应增加。


我通过 -XX:MaxNewSize=256m -XX:NewSize=256m 来设置新生代的大小,因此我希望两个版本的大小都是相同的。 - punx120

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接