【问题标题】:How can I get the GC class histogram programmatically如何以编程方式获取 GC 类直方图
【发布时间】:2018-06-27 19:12:38
【问题描述】:

我想以编程方式获得以下命令的相同结果:

jcmd <pid> GC.class_histogram | grep 'sun.util'

 728:            27           2592  sun.util.calendar.Gregorian$Date
 800:            44           2112  sun.util.locale.LocaleObjectCache$CacheEntry
 816:            36           2016  sun.util.calendar.ZoneInfo
1169:            22            880  sun.util.locale.BaseLocale$Key

...

我已经搜索了很多答案,但没有一个是明确的,做我想做的,有什么办法吗?

【问题讨论】:

    标签: java class garbage-collection histogram


    【解决方案1】:

    jcmd manpage 涵盖了这一点。

    要从远程计算机或使用不同的标识符调用诊断命令,您可以使用 com.sun.management.DiagnosticCommandMBean 接口。有关 DiagnosticCommandMBean 接口的更多信息,请参阅 API 文档http://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/DiagnosticCommandMBean.html

    【讨论】:

    • 感谢您的参考,基于此我找到了我的解决方案。
    【解决方案2】:

    以下代码显示相同的结果:

    import javax.management.MBeanException;
    import javax.management.ReflectionException;
    
    import com.sun.management.DiagnosticCommandMBean;
    
    import sun.management.ManagementFactoryHelper;
    
    @SuppressWarnings("restriction")
    public class ClassHistogram {
    
        public static void main(String[] args) throws MBeanException, ReflectionException {
            DiagnosticCommandMBean dcmd = ManagementFactoryHelper.getDiagnosticCommandMBean();
    
            String[] emptyStringArgs = {};
            Object[] dcmdArgs = { emptyStringArgs };
            String[] signature = { String[].class.getName() };
            System.out.println(dcmd.invoke("gcClassHistogram", dcmdArgs, signature));
        }
    
    }
    

    来自可用命令的参考:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2017-10-23
      相关资源
      最近更新 更多