我正在使用G1垃圾收集器,在Java 7更新45下,在CentOS 6 64位上有1g堆。 我定期看到两个完整的垃圾收集一个接一个地发生,而第一个清理非常少量的内存,第二个清理合理的数量。
我的gc日志示例:
25分钟后,这又发生了一次:
知道什么可以导致这种行为?为什么在第一个完整的gc期间没有清除内存?
我尝试使用最新的java 7(更新67)运行我的webapp,这种现象再次发生。
如果我理解了gc日志,那么从下面的年轻gc开始,堆大小在18.8M增加,所以假设分配失败导致整个gc受此值限制。尽管堆上有更多的空白空间,为什么G1会触发完整的gc?从附图中可以看出堆大小永远不会超过900M,为什么?