java如何测量方法调用时间?

java如何测量方法调用时间?,java,methods,time,call,Java,Methods,Time,Call,我有一个简单的类,我想测量方法调用时间,我该怎么做?寻找通用的方法来实现这一点,这样我就可以把它应用到更难的类以及。多谢各位 import java.io.*; import java.util.*; public class Turtle { private String name; private Formatter f; public Turtle(String name, Formatter f) { this.name = name; this.f =

我有一个简单的类,我想测量方法调用时间,我该怎么做?寻找通用的方法来实现这一点,这样我就可以把它应用到更难的类以及。多谢各位

import java.io.*;
import java.util.*; 

public class Turtle {
  private String name;
  private Formatter f;
  public Turtle(String name, Formatter f) {
    this.name = name;
    this.f = f;
  }

  public void move(int x, int y) {
    f.format("%s The Turtle is at (%d,%d)\n", name, x, y);
  }

  public static void main(String[] args) {
    PrintStream outAlias = System.err;
    Turtle tommy = new Turtle("Tommy",
      new Formatter(System.out));
    Turtle terry = new Turtle("Terry",
      new Formatter(outAlias));
    tommy.move(0,0);
    terry.move(4,8);
    tommy.move(3,4);
    terry.move(2,5);
    tommy.move(3,3);
    terry.move(3,3);
  }
}

使用探查器或手动计数:

public static int MOVE_CALL_COUNT;


public void move(int, int)
{
    MOVE_CALL_COUNT++;
}
建议进行分析。在NetBeans中有一个内置的探查器。否则,建议使用VisualVM,它与NetBeans中的探查器相同


如果您确实想知道运行这些方法需要多长时间,请使用探查器。

使用探查器或手动计数:

public static int MOVE_CALL_COUNT;


public void move(int, int)
{
    MOVE_CALL_COUNT++;
}
建议进行分析。在NetBeans中有一个内置的探查器。否则,建议使用VisualVM,它与NetBeans中的探查器相同


如果您真的想知道运行这些方法需要多长时间,请使用探查器。

尝试JDK中的探查器。

尝试JDK中的探查器。

如果它正在测试每个方法执行所需的时间,那么在这方面已经有一些很好的问题。退房


我的偏好,尤其是在一个有很多方法的大型项目中,是使用AOP,这样就不需要太多地修改现有代码。在我上面提到的问题上,基于同样的原因,AOP也提出了同样的建议。正如他所建议的,深入AOP超出了本文的范围,但它确实值得一看。看看如何使用spring进行方法计时

如果它正在测试每个方法执行所需的时间,那么与此相关的问题已经很多了。退房


我的偏好,尤其是在一个有很多方法的大型项目中,是使用AOP,这样就不需要太多地修改现有代码。在我上面提到的问题上,基于同样的原因,AOP也提出了同样的建议。正如他所建议的,深入AOP超出了本文的范围,但它确实值得一看。看看如何使用spring进行方法计时

使用专用工具,它将向您展示您所需要的更多信息:)我认为VisualVM是最好的工具,但是还有其他可用工具(例如JDK本机提供的JConsole,或付费的JRockit)
阅读更多


这些工具显示正在运行的应用程序和它们消耗的资源,以及servlet(如果有)处理时间、错误和调用计数等。还列出了实例化的线程和类。这肯定会满足您的需求

使用专用工具,它将向您展示您所需的更多信息:)我认为VisualVM是最好的工具,但还有其他可用工具(例如JDK本机提供的JConsole,或付费的JRockit)
阅读更多


这些工具显示正在运行的应用程序和它们消耗的资源,以及servlet(如果有)处理时间、错误和调用计数等。还列出了实例化的线程和类。这肯定会满足您的需求

您所说的“方法调用时间”是什么意思?正如一位ppl所说的,这是CPUT时间。我想知道是否有Java内置方法。不寻找任何复杂的东西,比如分析器,而是我可以在代码中特别使用的东西。类似这样的内容:long startTime=System.currentTimeMillis();汤米,移动(0,0);long-endTime=System.currentTimeMillis();println(“这花费了”+(endTime-startTime)+“毫秒”)//但是,有没有一种方法可以用某种Java方法在一行中实现呢?@aretal您的示例度量的是经过的(墙)时间,而不是CPU时间。显然,很难在一行中完成这一点,因为你至少需要标记时钟应该在哪里开始和停止。Aspects可以为您提供一个紧凑的解决方案,但是如果您只想测量时间,那么深入研究AOP可能会有些过头。是的,我理解我的解决方案的局限性,这就是为什么希望有一个更好的解决方案。似乎是AOP。不管怎样,谢谢你们,“方法调用时间”是什么意思?正如一位ppl建议的,这是CPUT时间。我想知道是否有Java内置方法。不寻找任何复杂的东西,比如分析器,而是我可以在代码中特别使用的东西。类似这样的内容:long startTime=System.currentTimeMillis();汤米,移动(0,0);long-endTime=System.currentTimeMillis();println(“这花费了”+(endTime-startTime)+“毫秒”)//但是,有没有一种方法可以用某种Java方法在一行中实现呢?@aretal您的示例度量的是经过的(墙)时间,而不是CPU时间。显然,很难在一行中完成这一点,因为你至少需要标记时钟应该在哪里开始和停止。Aspects可以为您提供一个紧凑的解决方案,但是如果您只想测量时间,那么深入研究AOP可能会有些过头。是的,我理解我的解决方案的局限性,这就是为什么希望有一个更好的解决方案。似乎是AOP。无论如何谢谢你,我认为aretai是指用户或CPU时间的数量,因为帖子被标记为[时间]。他还直接要求使用通用方法,因此手动计数也可能不是正确答案。当然,使用探查器很可能是继续进行的方式。我认为aretai意味着用户或CPU时间的数量,因为帖子被标记为[time]。他还直接要求使用通用方法,因此手动计数也可能不是正确答案。当然,使用探查器可能是继续进行的方法。