首页 > 解决方案 > 如何在 jvm 应用程序中引发长时间的完全 GC 暂停?

问题描述

我想在我的 jvm 应用程序中诱导长时间的完全 GC 暂停。有什么我可以使用的命令吗?我希望有超过 1 秒的暂停。

标签: javagarbage-collectiondistributed-systemgarbage

解决方案


为了使完整的 GC 更长(我假设您正在使用 Parallel Scavenge 收集器),我认为您可以尝试:

  1. 在完整 GC 之前禁用年轻 GC (-XX:-ScavengeBeforeFullGC)。通过这样做,full GCs 也负责收集年轻代,因此比只收集老年代需要更长的时间。

  2. 减少年轻代的大小(例如,-XX:NewRatio 或 -Xmx)。所以更多的对象会进入老年代而不是在年轻代中死去。因此,full GC 有更多的对象需要收集并且会更长。

  3. 分配更多长寿命的对象(如果您可以修改应用程序的源代码)。例如,尝试分配长寿命和大数组,因为大数组将由 JVM 直接在老年代分配。


推荐阅读