我正在使用G1垃圾收集器,在Java 7更新45下,在CentOS 6 64位上有1g堆 . 我定期看到两个完整的垃圾收集一个接一个地发生,而第一个清理非常少量的内存,第二个清理合理的数量 .

我的gc日志示例:

consecutive full garbage collections

25分钟后,这又发生了一次:

consecutive full garbage collections

知道什么可以导致这种行为吗?为什么在第一个完整的gc期间没有清除内存?

我尝试用最新的java 7(更新67)运行我的webapp,这种现象再次发生 .

consecutive full garbage collections

如果我理解正确的gc日志然后从下面的年轻gc中,堆大小增加了18.8M,所以假设分配失败导致完全gc受此值限制 . 尽管堆上有更多的空白空间,为什么G1会触发完整的gc?从附图中可以看出堆大小永远不会超过900M,为什么呢?

Heap size graph