每当堆内存超过特定阈值时,是否可以在Java中调用强制垃圾回收?
最佳答案
这已经发生了。例如,在G1GC
中,这是指当年轻空间已满(对于次要收藏)或当按下InitiatingHeapOccupancyPercent
(对于主要收藏)时。这两个都是通过标志控制的,因此您可以确定何时真正要触发GC(即IFF)。
在Shenandoah
中,有ShenandoahGCHeuristics
会选择一些试探法(它们也确实取决于大小)。
另一方面,如果您想以编程方式执行此操作(已经有工具可以执行此操作),则可以编写一些代码来检查堆的大小(例如,通过ManagementFactory::getMemoryPoolMXBeans
),然后检查 via an agent call 。通常,您将需要一个很好的理由来执行此操作。