在文章《理解Java垃圾收集》中,我们了解了不同GC算法的流程,GC的工作方式,年轻代和年老代,以及您应该了解的新JDK 7中5种类型的GC的知识。这些类型的GC对性能都有影响。
本文将讨论和说明如何监控Java GC.
什么是GC监控?
GC监控是指通过工具或指令了解JVM运行GC的过程和相关信息。例如,我们可以找出:
年轻代的对象晋升多少到老年代,或STW发生了多长时间等信息
通过GC监控,我们可以知道JVM是否有效地运行了GC,是否需要GC调优,同时为GC调优提供依据。
如何监控GC?
监视GC的方式不同,但唯一的区别是如何显示GC操作信息。GC由JVM完成,并且由于GC监视工具会公开JVM提供的GC信息,所以无论您如何监视GC,您都将获得相同的结果。因此,您不需要学习所有方法来监视GC,但是由于只需要很少的时间就可以学习每种GC监视方法,因此了解其中的几种方法可以帮助您在不同的情况和环境下使用正确的方法。
首先,取决于访问接口,可以将GC监视方法分为CUI和GUI。典型的CUI GC监视方法涉及使用单独的名为“ jstat ”的CUI应用程序,或者在运行JVM时选择一个名为“ verbosegc ” 的JVM选项。
GUI GC监视是通过使用单独的GUI应用程序完成的,三个最常用的应用程序是“ jconsole”,“ jvisualvm”和“ Visual GC”。
让我们进一步了解每种方法。
jstat
jstat是HotSpot JVM中的监视工具。用于HotSpot JVM的其他监视工具是jps和jstatd。有时,您需要使用所有三个工具来监视Java应用程序。
jstat不只显示GC操作信息。它还提供了类加载器操作信息或即时编译器操作信息。在jstat可以提供的所有信息中,本文将仅介绍其监视 GC操作信息的功能。
jstat位于$ JDK_HOME / bin中,因此,如果java或javac可以在不从命令行设置单独目录的情况下运行,那么jstat也可以。
您可以尝试在命令行中运行以下命令。
$> jstat –gc $ 1000
S0C S1C S0U S1U EC EU OC OU PC PU YGC