2012-02-25 2 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 내장 메서드가 있는지 궁금해했습니다. 프로파일 러와 같은 복잡한 것을 찾지는 않지만 코드에서 임시로 사용할 수 있습니다. 뭔가 이런 : long startTime = System.currentTimeMillis(); tommy.move (0,0); long endTime = System.currentTimeMillis(); System.out.println (""+ (endTime - startTime) + "milliseconds"); // 몇 가지 Java 메소드를 사용하여 한 줄로 처리하는 방법이 있습니까? – aretai

+0

@aretal이 예는 CPU 시간이 아닌 경과 된 시간을 측정합니다. 분명히 시계가 시작되고 멈춰야하는 선을 적어도 표시해야하기 때문에 한 줄로보기가 어렵습니다. 애스펙트는 컴팩트 솔루션을 제공 할 수 있지만, 원하는 모든 것이 시간을 측정하는 것이라면 AOP를 파헤칠 때마다 과잉 공격이 될 수 있습니다. –

답변

1

당신에게 더 많은 것을 보여줄 전용 도구를 사용하십시오 :) VisualVM은 제 의견으로는 가장 좋습니다. 그러나 JDK에서 기본적으로 제공되는 JConsole 또는 지불 된 JRockit과 같은 다른 사용 가능한 기능이 있습니다.
here on my post

이러한 도구를 참조하여 (있는 경우) 또한 스레드와 인스턴스 클래스가 나열되어 처리 시간, 오류 및 호출 횟수 등을 서블릿과 함께 그들에 의해 소비되는 응용 프로그램과 자원을 실행 보여줍니다. 이것은 분명히 당신의 요구를 만족시킬 것입니다.

3

사용 중 하나 프로파일 러를 감사 또는 수동으로 수 :

public static int MOVE_CALL_COUNT; 


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

프로파일이 좋습니다. NetBeans에는 빌트인 프로파일 러가 있습니다. 그렇지 않으면 VisualVM을 사용하는 것이 좋습니다.이 옵션은 NetBeans와 동일한 프로파일 러입니다.

이 메서드를 실행하는 데 걸리는 시간을 알고 싶다면 프로파일 러를 사용하십시오.

+0

게시자가 [시간] 태그가 지정되어 있기 때문에 사용자 또는 CPU 시간의 양을 의미합니다. 또한 그는 직접 일반적인 방법을 요구했기 때문에 수동 계산은 정답이 아닐 수도 있습니다. 물론 프로파일 러를 사용하는 것이 진행될 가능성이 큽니다. –

2

JDK에서 프로파일 러를 시도하십시오 (visualvm).

1

각 방법이 실행되는 데 걸리는 시간을 확인하기 위해 테스트 중이면 SO에 관한 좋은 질문이 이미 있습니다. this one for example을 확인하십시오.

필자가 선호하는 것은 특히 많은 프로젝트가있는 큰 프로젝트에서 AOP를 사용하는 것이므로 기존 코드를 너무 많이 변경하지 않아도됩니다. This answer 나는 위에 링크 된 질문에 AOP는 같은 이유로 제안합니다. 그가 말했듯이, AOP에서 깊이 들어가는 것은 이것의 범위를 벗어나지 만, 확실히 한 번 볼만한 가치가 있습니다. 방법 타이밍에 스프링을 사용하는 방법에 대해서는 this tutorial을 살펴보십시오.

관련 문제