2012-02-25 3 views
1

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

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

Что значит «время вызова метода»? –

+0

Как один из ppl предложил это время CPUT. Я задавался вопросом, есть ли какой-либо встроенный Java-метод. Не ищу ничего сложного, например, профилировщика, а скорее того, что я могу использовать ad hoc в своем коде. Что-то вроде этого: long startTime = System.currentTimeMillis(); tommy.move (0,0); long endTime = System.currentTimeMillis(); System.out.println («Это заняло» + (endTime - startTime) + «миллисекунды»); // но есть ли способ сделать это в одной строке с некоторым методом Java? – aretai

+0

@aretal Ваш пример измеряет истекшее (настенное) время, а не время процессора. По-видимому, это сложно сделать в одной строке, поскольку вам нужно по крайней мере отметить линии, где часы должны начинаться и останавливаться как-то. Аспекты могут дать вам компактное решение, но, вероятно, слишком сложно перекопать AOP, если вы хотите только измерить время. –

ответ

1

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

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

3

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

public static int MOVE_CALL_COUNT; 


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

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

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

+0

Я думаю, что istai означает количество пользователей или процессорное время, так как сообщение помечено [время]. Кроме того, он прямо просил об общих методах, поэтому руководство, вероятно, тоже не является правильным ответом. Разумеется, использование профайлера * вероятно, способ продолжения. –

1

Если он тестирует, как долго каждый метод выполняется для выполнения, то есть уже некоторые хорошие вопросы, связанные с этим на SO. Выезд this one for example.

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

Смежные вопросы