aretai
aretai

Reputation: 1641

java how can I measure method call times?

I have a simple class and I would like to measure method call times how can I do that? Looking for generic way to achieve that so I can apply it to more difficult classes as well. Thank you

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);
  }
}

Upvotes: 1

Views: 655

Answers (4)

Jacek Milewski
Jacek Milewski

Reputation: 3304

Use dedicated tools that will show You even more You need :) VisualVM is best one in my opinion, However there are other available (e.g. JConsole that is provided in JDK natively, or JRockit that is paid).
Read more here on my post

These tools shows running apps and resources consumed by them along with servlets (if any) processing times, error and call counts etc. Also threads and classes instantiated are listed. This will surely satisfy Your needs

Upvotes: 1

Mr Moose
Mr Moose

Reputation: 6344

If it is testing to see how long each method takes to execute, then there are already some good questions relating to this on SO. Check out this one for example.

My preference, especially in a larger project with many methods, would be to use AOP so it doesn't involve changing existing code too much. This answer on the question I linked to above suggests AOP for the same reasons. As he suggests, going in depth in AOP is beyond the scope of this, but it is certainly worth a look. Take a look at this tutorial into how to use spring for method timings.

Upvotes: 1

Martijn Courteaux
Martijn Courteaux

Reputation: 68847

Use either a profiler or count them manually:

public static int MOVE_CALL_COUNT;


public void move(int, int)
{
    MOVE_CALL_COUNT++;
}

Profiling is recommended. In NetBeans there is a built-in profiler. Otherwise, VisualVM is a recommended option, which is the same profiler as in NetBeans.

If you really want to know how long it takes to run these methods, use a profiler.

Upvotes: 3

Maarten Bodewes
Maarten Bodewes

Reputation: 93958

Try the profiler in the JDK, visualvm.

Upvotes: 2

Related Questions