即使有巨大的可用内存,Java GC 也会运行太频繁

Jam*_*row 5 java garbage-collection memory-leaks jprofiler jvisualvm

我检查了 Java 应用程序的当前内存行为,我注意到垃圾收集器最初很少运行,但在很长一段时间内它会继续更频繁地运行,即使我没有设置最大内存使用量限制(服务器有 8Gb 的空闲内存)。

最初 GC 每 20 分钟运行一次,15 小时后每分钟运行一次,但应用程序做同样的事情并且 RAM 使用量没有峰值。

继续运行GC,消耗越来越多的CPU,24小时后,CPU使用率为85%,GC每10秒运行一次。

以下是演出截图:

Jprofiler 运行 14 小时

Jprofiler 运行 14 小时

JvisualVM 运行了最后一个小时

JvisualVM 运行了最后一个小时

JvisualVM - 高 CPU 使用率

JvisualVM - 高 CPU 使用率

为什么即使内存非常低,GC 也会启动?它不应该在这些情况下开始。

可能是什么原因或我应该怎么做来调查这种行为?