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

最佳答案

这已经发生了。例如,在G1GC中,这是指当年轻空间已满(对于次要收藏)或当按下InitiatingHeapOccupancyPercent(对于主要收藏)时。这两个都是通过标志控制的,因此您可以确定何时真正要触发GC(即IFF)。

Shenandoah中,有ShenandoahGCHeuristics会选择一些试探法(它们也确实取决于大小)。

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

08-03 19:09