首页 > 解决方案 > 堆内存超过阈值后的 Java 垃圾收集

问题描述

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

标签: javagarbage-collectionheap-memoryjava-heap

解决方案


已经发生了。例如在 中G1GC,这要么是年轻空间已满(对于次要收集),要么是在InitiatingHeapOccupancyPercent被命中时(对于主要收集)。这两者都是通过标志控制的,所以你可以知道什么时候应该触发 GC,如果你真的想要那个。

Shenandoah那里ShenandoahGCHeuristics会选择一些启发式方法(它们也取决于大小)。

另一方面,如果您想以编程方式执行此操作(已经有工具可以执行此操作),您可以编写一些代码来检查堆的大小(例如 via ManagementFactory::getMemoryPoolMXBeans),然后通过 agent call。一般来说,你需要一个很好的理由来做这件事。


推荐阅读