以下是一个使用以下参数运行的JVM的
jstat
输出:-Xmx10240m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode
jstat输出带有参数。
jstat -gcutil <pid> 10s
这段代码片段的执行时间为80秒,根据统计数据,其中将近70秒用于垃圾回收(GC)。这些都是触发的完全GC。
Timestamp S0 S1 E O P YGC YGCT FGC FGCT GCT Diff
1040430.2 0 0 23.69 24.58 95.03 168048 22187.057 3672 4483.931 26670.988 8.175
1040440.2 0 0 0.1 24.58 95.02 168048 22187.057 3674 4495.551 26682.608 11.62
1040450.2 0 0 4.19 24.59 95.03 168048 22187.057 3677 4506.731 26693.788 11.18
1040460.2 0 0 0.01 24.45 95.02 168048 22187.057 3679 4517.391 26704.448 10.66
1040470.2 0 0 0.33 24.45 95.03 168048 22187.057 3681 4522.213 26709.27 4.822
1040480.2 0 0 0 24.43 95.02 168048 22187.057 3684 4534.816 26721.874 12.604
PermGen空间已经接近满了,但我认为Sun GC机制不会尝试在这里进行收集,并且我也看不出基于Eden或Old空间进行收集的原因。
有人能给我一些指示吗?可能发生了什么问题?
CMSPermGenSweepingEnabled
在 Java 6 中似乎已被弃用。尽管如此,大多数人仍使用CMSClassUnloadingEnabled
和CMSPermGenSweepingEnabled
来启用 Java 6 中 Permgen 的收集。我能找到的关于这个行为的最接近文档是 OpenJDK 邮件列表 和 Sun bug 数据库中的 5037027 和 6250214 错误。 - Vineet Reynolds