Full GC - Sun JVM运行频率

时间:2010-10-16 04:03:53

标签: java jvm jstat

在JDK 1.6中:我看到已经运行了完整的GC,但是旧代和perm gen空间没有被完全使用 - 问题是根据我的理解FGC仅在旧的gen或perm gen已满时运行 - 我无法要理解为什么它已经运行,即使使用率%很低?。

请参阅下面的jstat -gcutil输出:

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 0.00  82.14  51.17  13.78  26.43    219   19.347     1    0.131   19.479

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 82.14   0.00   9.12  13.92  26.66    222   19.771     1    0.131   19.902

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 82.14   0.00  11.07   9.07  24.15    230   20.166     2    1.851   22.017

我的最小/最大堆数为1024M,最小和最大permGen空间定义为768M。

3 个答案:

答案 0 :(得分:1)

我通过放置jvm opts解决了这个问题:XX:-DisableExplicitGC

某些外部jar文件中的某些代码可能已显式调用System.gc,导致此类垃圾回收行为。禁用这些,导致垃圾收集的预期行为在即将达到100%使用时运行。

答案 1 :(得分:1)

当完整的gc发生时,准确地打开详细的gc。因为jstat即使对于主要/终身收藏也会显示FGC事件

For more info visit

答案 2 :(得分:0)

  

FGC仅在旧的gen或perm gen已满时运行

这不是真的。阅读java参考文件here

Java中的内存管理可能会让每个人感到惊讶。学习如何为非平凡的应用程序设置JVM参数需要很多年。

  

permGen空间定义为768M。

将其减少到128M