2013-06-20 3 views
1

Java의 특정 메소드로 인한 오버 헤드를 확인하려고합니다. 메소드가 "보내기 (메시지)"이고, "로그 (타임 스탬프), 보내기 (메시지), 로그 (타임 스탬프)"및 타임 스탬프 간의 차이점을 찾고 싶습니다. 이 방법은 메서드가 매우 빠릅니다 (예상되는 차이는 나노초 단위 임). 시간 소인을 기록하는 데 걸리는 시간도 측정하고 싶지 않습니다 (무시할 수없는 경우 제외). 타임 스탬프를 효율적으로 기록하는 방법을 권해 주시겠습니까?보통 대기 시간이 나노초 간격 인 낮은 대기 시간 로깅

+1

[caliper] (https://code.google.com/p/caliper/) – fge

답변

2

이 작업을 수행하는 가장 좋은 방법은 메서드 호출 전에 시간을 기록한 다음 메서드를 천 또는 수백만 회 호출하고 종료 시간을 기록하는 것입니다. 빠른 부서는 한 번의 통화에 소요되는 총 시간을 알려줍니다 (매우 작음).

JIT로 인해 프로덕션 환경에서 실행되는 것과 동일한 방식으로 테스트 방법을 확인하십시오. 그렇지 않으면 실제 결과와 테스트 결과 중 하나에서 결과가 달라질 수 있습니다. 또한 시간 테스트를 시작하기 전에 수천 번 방법을 실행하여 완전히 최적화 된 코드를 실제로 실행하는지 확인할 수도 있습니다. 당신이 log 오버 헤드 두려워하는 경우

+0

감사합니다. wobblycogs 및 fge! –

0

이 해결 방법은 간단하다 :

final long before, after; 

before = System.nanoTime(); 
send(message); 
after = System.nanoTime(); 

log("before: " + before); 
log("after: " + after); 

유일한 오버 헤드 왼쪽 따라서 System.nanoTime에 대한 호출()이다.