0

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

4

2 回答 2

0

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

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

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

于 2020-04-08T23:02:19.563 回答
0

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

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

希望能帮助到你!

于 2020-04-08T21:43:26.083 回答