年轻的垃圾收集更长时间停顿与Java 7 vs java 6

pun*_*120 7 java garbage-collection java-6 java-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
Run Code Online (Sandbox Code Playgroud)
  • 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 vs java 7是20ms.版本6和版本7之间有什么变化可以解释这种行为吗?

编辑:我注意到java 7以64位模式运行,而java 6使用32位JVM,这可以解释其中的区别吗?

谢谢

Try*_*ing 2

-XX:NewRatioJava 6 的默认值为8,但 Java 7 的默认值为2。所以在java 6中,年轻代的大小小于java 7,因此我感觉到了差异。

因为从一个城市收集垃圾的时间与该城市的规模成正比。如果城市规模增加,那么时间就会增加。