프로그램 실행 중 객체가 사용되는시기와 횟수를 알고 싶습니다. 이를 위해 JVM 스택에 액세스해야합니까? 그렇지 않을 수도 있습니다.JVM 스택 액세스
답변
이렇게하려면 프로파일 러를 사용해야합니다. YourKit 또는 JProfiler 또는 VisualVM과 같은 것입니다.
+1, VisualVM에는 JDK> = 1.6이 번들로 제공됩니다. – quaylar
"개체가 몇 번 사용되고 있습니까?"라는 것은 무엇을 의미합니까? 생성자가 몇 번이나 호출 되었습니까? 또는 객체의 메소드가 몇 번 호출 되었습니까? 분명히하십시오 ...
어쨌든, 그것을 할 수있는 몇 가지 방법이 있습니다.
당신은 당신의 마음에 드는 프로파일 러를 사용할 수 있습니다, 난 당신이 "추적"모드 (계측을 수행하는 모드, 그리고 샘플링 모드)를 사용해야합니다 생각합니다.
클래스를 재 컴파일하는 것은 당신이이 다음을 수행 할 수있는 것보다 옵션의 경우 : 말, 당신은 몇 가지 constuctors와 클래스 푸 있습니다
공용 클래스 푸 {
공공 푸 (I를 INT) {
가// some constructor
}
공공 푸 (문자열들) { // 다른 생성자,}
}
말, 당신은
그래서, 당신은 정적을 사용할 수 있습니다 (즉, 개체가 생성 된 횟수입니다) 당신의 생성자가 호출 한 횟수 알고 싶어 데이터 멤버를 만들고 생성자를 호출 할 때마다 카운트를 증가시킵니다. 이처럼 :
public class Foo {
private static int count = 0;
public Foo(int i) {
// if we're here, the object is being created now:
count++;
.....
}
...
}
은 그럼 당신은 생성 된 덤프가 좋아하는 프로파일을 다시 jhat에 의해 또는 열 수 있습니다 (JAVA_HOME/bin에있는 jmap을 함께 예를 들어) 힙의 스냅 샷을 할 수 있으며 다음과 같은 작업을 할 수 있습니다 객체 상태를 탐색하여 확인하십시오.
물론이 방법은 메소드 호출에도 적용됩니다. 실제로 동일한 클래스 로더에 의해 객체가 생성되는 한 계속 작동합니다. 당신 3.If는
는 악기 당신이 있습니다, 여기에 AspectJ를 같은 프레임 워크를 사용하여 고려할 수 2와 같은 효과를 달성하기 위해 당신의 바이트 코드를 할 수있는, 프로파일 러를 사용하고자하지 않을 여전히 코드를 다시 컴파일 할 수는 없지만 다른 사람의 많은 ...
나는 프로파일이 가장 빠른 방법은 여기에서이 작업을 수행하여 측정하려고하는 이것이
- 1. JVM 스택 인트로 피킹
- 2. JVM 스택 변수
- 3. 동적으로 확장 가능한 JVM 스택
- 4. 학습 자원 - 스택 머신, JVM 특히
- 5. jvm/scala/lift 응용 프로그램 스택?
- 6. JVM 원시 메모리를 실행하는 액세스
- 7. 카멜 컨텍스트의 JVM 옵션에 액세스
- 8. Java 스택 프레임 액세스
- 9. JVM 외부에서 번들로 제공된 Java 파일에 액세스
- 10. Spring의 Application Context xml에서 JVM 옵션에 액세스
- 11. JVM 104 : Blackberry Simulator의 스택 오버 플로우 오류
- 12. 은 스택 오버플로 액세스 대형 벡터
- 13. JVM INSTR monitorenter 및 JVM INSTR monitorexit
- 14. 클래스로드 중 JVM
- 15. JVM 옵션이
- 16. JVM 수명주기?
- 17. 클러스터링 JVM
- 18. JVM 핫스왑
- 19. IBM의 JVM
- 20. Weblogic, JVM 및 EAR
- 21. Windows에서 Java 스택 추적
- 22. 스택 되감기 중 스택 변수 인쇄
- 23. 문자 스택, 문자열 스택, 정수 스택, 정수 배열 스택 등
- 24. JVM 명령 시작 옵션 중복
- 25. 스택
- 26. 스택
- 27. 스택
- 28. JVM 1.6.0_23에서 JVM/핫 스폿 가비지 콜렉션을 디버그하기위한 소스 얻기
- 29. Amazon EC2에서 JVM 튜닝
- 30. jvm warmup 피하기
도움이 희망이라고 생각? – casablanca
개체 해시를 호출 할 때 모든 메서드와 생성자를 로깅 할 수 있습니까? –