Java Как я могу измерить время вызова метода? - PullRequest
1 голос
/ 25 февраля 2012

У меня есть простой класс, и я хотел бы измерить время вызова метода, как я могу это сделать? Ищите общий способ достижения этого, чтобы я мог применять его и к более сложным занятиям. Спасибо

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

Ответы [ 4 ]

3 голосов
/ 25 февраля 2012

Используйте профилировщик или посчитайте их вручную:

public static int MOVE_CALL_COUNT;


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

Рекомендуется профилирование.В NetBeans есть встроенный профилировщик.В противном случае рекомендуется использовать VisualVM, который является тем же профилировщиком, что и в NetBeans.

Если вы действительно хотите узнать, сколько времени потребуется для запуска этих методов, используйте профилировщик.

2 голосов
/ 25 февраля 2012

Попробуйте профилировщик в JDK, visualvm .

1 голос
/ 25 февраля 2012

Используйте специальные инструменты, которые покажут Вам еще больше, что вам нужно :) На мой взгляд, лучше всего подходит VisualVM, однако есть и другие доступные (например, JConsole, которая предоставляется в JDK изначально, или JRockit, который оплачивается).
Подробнее здесь, на моем посту

Эти инструменты показывают запущенные приложения и ресурсы, потребляемые ими, а также время обработки сервлетов (если есть), количество ошибок и вызовов и т. Д. Также перечислены экземпляры потоков и экземпляры классов. Это, безусловно, удовлетворит Ваши потребности

1 голос
/ 25 февраля 2012

Если тестирование показывает, сколько времени занимает выполнение каждого метода, то в SO уже есть несколько хороших вопросов, касающихся этого. Проверьте этот, например .

Я предпочитаю, особенно в большом проекте с большим количеством методов, использовать AOP, чтобы не слишком сильно менять существующий код. Этот ответ на вопрос, с которым я связан, предполагает АОП по тем же причинам. Как он предлагает, углубленное изучение АОП выходит за рамки этого, но это, безусловно, стоит посмотреть. Взгляните на этот урок , как использовать пружину для синхронизации методов.

...