确定 JVM 垃圾收集器的运行时间

Determine runtime of JVM garbage collector

在我的应用程序中,某些部分需要在给定时间内(通常以分钟为单位)执行。由于应用程序使用大量内存,我发现在某些情况下,给定时间可以通过 运行 垃圾收集器减少(有时很长时间)。是否可以读取给定时间段内垃圾收集器在某处花费的时间,以便我可以对此做出反应并给我的代码更多的执行时间?

我已经尝试过 g1 垃圾收集器,但我注意到一些 jvm 崩溃。吞吐量对我来说很重要,所以我需要知道何时调用垃圾收集器,这会使应用程序停止一段时间。

所以我想知道在执行期间什么时候调用GC。

-Xloggc:gc.log
-XX:+PrintGCDetails
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime

将这些 JVM 标志添加到您的应用程序中。

PrintGCApplicationStoppedTime 显示应用程序在安全点停止的时间。大多数时候它是由 GC 'stop the world' 引起的,尽管有

PrintGCApplicationConcurrentTime 是应用程序不间断运行的时间

注意:Java 6 还不支持 GC1,所以你没有添加它的价值。