Java 堆内存超过阈值后进行垃圾回收

Java Garbage Collection after heap memory crosses a threshold

是否可以在每次堆内存超过特定阈值时在 java 中调用强制垃圾回收?

理论上是的,您可以配置此类行为。确切的细节取决于使用的垃圾收集算法。例如,对于 CMS,您可以在堆内存使用率达到 70% 时启动 GC。您很可能还想设置初始和最大内存限制。

-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70

希望对您有所帮助!

已经发生了。例如在 G1GC 中,这是当年轻的 space 已满(对于次要集合)或当 InitiatingHeapOccupancyPercent 被命中时(对于主要集合)。这两者都是通过标志控制的,因此您可以判断 确切地 何时应该触发 GC,IFF 你真的想要那个。

Shenandoah 中有 ShenandoahGCHeuristics 会选择一些启发法(它们也取决于大小)。

另一方面,如果您想以编程方式执行此操作(已经有工具可以执行此操作),您可以编写一些代码来检查堆的大小(例如通过 ManagementFactory::getMemoryPoolMXBeans) 然后 。通常,您需要一个 非常 的充分理由才能这样做。