Hotspot的清除GC停止运行,只留下标记扫描GC

时间:2011-07-09 04:42:06

标签: java garbage-collection jvm-hotspot

我在某个程序中遇到Hotspot GC的奇怪之处。有时,看起来几乎就像清除GC一样,只有每次Eden空间填满时都会运行标记扫描GC。毋庸置疑,这对于表现来说太可怕了。我还没有弄清楚这个问题的发生条件。

现在看一下具有此行为的JVM,旧版本为170 MB(已使用且最大)并且从不增长或缩小集合,Eden gen为85 MB,Survivor空间从未使用过(我猜这与清除GC没有运行一致),并且总分配的堆大小是256 MB(显然,匹配,Old + Eden)。

有关可能导致此问题的任何线索?

1 个答案:

答案 0 :(得分:4)

我怀疑堆太满了。如果旧空间+ eden空间加起来最大堆空间,那么幸存者空间就没有空间,并且无法运行世代收集器。

尝试增加最大堆空间。


重点是幸存者空间中必须有足够的自由空间来容纳所有在伊甸园空间收集中存活的物体。如果可用空间不可用,则复制收集器无法工作,JVM必须回退到标记和扫描。

这是分代/复制收集器如何工作的基础。

就像我说的那样,尝试增加堆空间。