2010-01-25 21 views
3

클래스의 인스턴스가 해당 멤버 메서드를 호출 한 횟수를 알 수있는 방법이 있습니까?알 수있는 방법, 특정 메서드가 자바에서 호출 된 횟수

필자는 (잘 모르겠다.) 한 가지 방법은 전용 멤버 변수를 메서드에 사용하는 것인데, 그렇게 많은 방법이 있다면 가능하지 않을 것이다.

예를 들어

:

class A{ 
     public void someMethod(){ 
     } 
} 

와 나는 인스턴스가이

A a = new A(); 

그래서 내가 배 a의 번호가 프로그램에서 someMethod을 호출 한 알고 싶어 말한다. 우리는 여러 가지 방법을 사용할 수 있습니다.

+3

안녕하십니까. 코드 스 니펫을 게시 할 때마다 형식이 잘못되어 거의 컴파일되지 않습니다. 주의를 기울여주십시오. :) 의도는 4 칸으로하고'클래스 '는'클래스'라고 씁니다. – BalusC

+0

죄송합니다. BalusC. 그것은 제가 찾고있는 것을 보여준 것입니다. 컴파일하지 못했습니다. 그리고 나는 장래에 그것을 돌볼 것입니다. 감사합니다 – GuruKulki

+0

BalusC : 왜 4 개의 공백을 사용하여 의도합니까? 나는 탭으로 식별하고 있습니다. 1x 시간 대신 키보드를 4x 번 입력해야하는 타당한 이유가 있습니까? – newbie

답변

5

이 정보가 프로그램 내부에 필요하면 이것이 바로 aspect 지향 프로그래밍의 의미입니다. AspectJ을 사용하면 매우 쉽습니다. Spring AOP도 사용할 수 있습니다.

+0

스프링 AOP 메소드가 intrecepting 또는 전혀 불가능한 메소드를 호출하면 어떨까요? – newbie

2

프로필러 사용을 고려해 볼 수 있습니다. NetBeans 또는 YourKit 등 하나입니다.

+0

당신은 정교 할 수 있습니까? 내가 이해하지 못했습니다 – GuruKulki

+1

@ gurukulki : http://java-source.net/open-source/profilers 프로파일 러를 사용하여 각 클래스/메소드/변수/메모리 사용법을 분석하고 통계를 얻을 수 있습니다. – BalusC

4

취할 수있는 몇 가지 방법을 사용하여 코드를 수정하는 방법을 쉽게에 따라 있습니다 : 당신이 제안으로

  • 그냥 카운터 변수를 추가를; 코드를 쉽게 작성할 수 있다면 많은 장소에 코드를 추가해야합니다.
  • 다른 모든 유틸리티 클래스에 카운터 코드를 넣어야합니다.이 코드는 모든 관련 위치에서 "이 메서드에 대해 카운터 증가"를 호출합니다. 문제의 유틸리티 메소드는 호출 스택을 검사합니다. getStackTrace() - 누가 호출했는지 확인하고 해당 카운터를 증가시킵니다.
  • 이 시설을 제공하는 프로파일 러를 사용하십시오.
  • ASM 라이브러리를 사용하여 카운터를 추가하십시오.
  • Java 계측 프레임 워크를 사용하여 클래스가로드 될 때 관련 메소드의 클래스 정의를 즉시 수정합니다. 이것은 잠재적으로 가장 융통성이 있습니다. 실제로 작성하지 않았고 수정할 수없는 코드를 계측 할 수도 있습니다. 즉, 계산을 수행하려는 실제 클래스의 코드를 변경할 필요가 없음을 의미합니다. -하지만 코드 작성이 가장 복잡합니다.
1

많은 Open Source Java Profilers이 있습니다.

프로파일 러는 정적 코드 분석과 달리 동적 프로그램 분석을 수행하고 프로그램의 동작을 보여 주며 프로그램이 실행될 때 정보를 수집합니다. 이러한 프로파일 러 중 일부는 메소드 호출 통계를 보여줍니다.

1

JProbe에 액세스 할 수있는 경우 특정 인스턴스에 의해 메소드가 호출 된 횟수가 표시됩니다.

그들은 MAT도 무료라고 말하면서 아직 시도하지 않았습니다.

1

java.lang.reflect.Proxy 클래스로 할 수 있습니다. Horstmann의 저서 'Core Java. 볼륨 I '이 기술은 자세히 설명되어 있습니다.

관련 문제