4

在 JDK 1.6 中:我看到完整的 GC 已经运行,但是老一代和 perm gen 空间没有完全使用——问题是根据我的理解 FGC 只在老一代或 perm gen 满时运行——我不明白为什么即使使用百分比很低,它也能运行?

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

  S0 S1 EOP 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 EOP 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 EOP 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。

4

3 回答 3

1

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

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

于 2010-11-12T06:36:38.007 回答
1

当完全 gc 发生时,将详细 gc 切换到现在。因为 jstat 即使对于主要/终身收藏也显示 FGC 事件

欲了解更多信息,请访问

于 2010-11-16T05:17:39.767 回答
0

FGC 仅在 old gen 或 perm gen 已满时运行

这不是真的。在此处阅读 java 参考论文

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

permGen 空间定义为 768M。

减少到128M

于 2010-10-18T08:32:27.560 回答