2010-10-16 86 views
4

在JDK 1.6中:我看到完整的GC已经运行,但老一代和perm gen空间没有完全使用 - 问题与我的理解一样FGC只在旧gen或perm gen已满 - 我无法理解即使使用率很低,为什么它仍然运行?完整的GC - Sun JVM运行频率

参见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。

+0

一个可能的原因可能是RMI:“RMI强制定期完全收集,这些收集的频率可以通过properties.java -Dsun.rmi.dgc.client.gcInterval和 -Dsun.rmi.dgc.server来控制。 gcInterval“http://java.sun.com/docs/hotspot/gc1.4.2/ – Anna 2010-10-19 04:23:38

回答

0

FGC只有当老根或烫发根是充分

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

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

permGen空间被定义为768M。 XX:-DisableExplicitGC

通过将JVM选择采用它减少到128M

+0

无法降低perm gen空间 - 因为我们的应用程序大量使用它......使用高价值对它有什么不利之处? – Anna 2010-10-18 10:44:47

+0

为什么你的应用程序会消耗烫发吗?你使用DOM XML解析器或比较多个字符串调用实习生? – iddqd 2010-10-18 10:53:25

+0

从你引用的pdf链接中可以看出:“当年轻一代填满时,就会进行一代年轻一代的收藏(有时也称为次要收藏),当旧的或永久的一代填满时,完整的 集合(有时称为主要集合)通常是完成的“。那些旧/烫发器没有装满而GC已经完成的情况是什么? – Anna 2010-10-18 10:55:50

1

我解决了问题。

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

1

完全切换gc到现在完全gc发生。因为即使对于主要/终身收藏品,jstat也显示FGC活动

For more info visit