【问题标题】:How to profiling Java methods invoked by reflect如何分析反射调用的 Java 方法
【发布时间】:2014-10-22 08:42:05
【问题描述】:

我正在使用 JVisualVM 来分析我的 Java 应用程序。

在我的应用程序中,我使用反射来运行一些方法。例如:

public void a() {}

public void b() {}

public void runMethod() {
    Method m = this.getClass().getMethod("a");
    // or getMethod("b) in some cases
    m.invoke(this, [])
)

在 JVisualVM 分析中,我只能看到 runMethod 使用的 CPU 时间。我想看看方法a 或b 使用了多少CPU 时间。我怎样才能做到这一点?谢谢。

【问题讨论】:

  • 没有必要做一些特别的事情。必须显示方法的结果。如果您使用采样,a 可能会执行得太快,并且永远不会出现在统计数据中。
  • @talex 是的,你是对的!谢谢。

标签: java reflection profiling visualvm jvisualvm


【解决方案1】:

你可以这样做:

        public void a(){               // just for testing
          try {
                Thread.sleep(1);          //OR some for loop to print something
             } catch (InterruptedException e) {

            e.printStackTrace();
             }
         }

           long startTime=System.currentTimeMillis();
            m.invoke(Bidlist[0], null);
            long endTime=System.currentTimeMillis();
            System.out.println("show takes "+(endTime-startTime)+" ms");

因为您没有在 a 中进行任何操作,所以它会给出 0。为了理解我把 sleep(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2014-05-02
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多