티스토리 뷰
반응형
Java에서 함수의 실행 시간을 측정하는 가장 보편적이고 정확한 방법은 System.currentTimeMillis() 또는 System.nanoTime()을 사용하는 것입니다. 밀리초(ms) 단위 측정이 목적이라면 currentTimeMillis()를 사용하면 됩니다.
실무에서 바로 활용하실 수 있도록 기본적인 방법부터 가독성을 높인 방법까지 단계별로 설명해 드릴게요.
1. 가장 기본적인 측정 방식
함수의 시작 직전과 종료 직후에 시간을 기록하여 그 차이를 계산하는 방식입니다.
Java
public class ExecutionTimeExample {
public static void main(String[] args) {
// 1. 시작 시간 기록 (밀리초 단위)
long startTime = System.currentTimeMillis();
// 2. 실행할 함수 호출
performTask();
// 3. 종료 시간 기록
long endTime = System.currentTimeMillis();
// 4. 차이 계산 (종료 시간 - 시작 시간)
long duration = endTime - startTime;
System.out.println("함수 실행 시간: " + duration + " ms");
}
public static void performTask() {
try {
// 예시를 위해 1.5초간 대기 (실제 로직이 들어가는 부분)
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2. 정밀도가 필요한 경우 (nanoTime 활용)
밀리초 단위는 매우 빠르게 끝나는 함수(예: 단순 산술 연산)를 측정할 때 0ms로 나올 수 있습니다. 이때는 나노초 단위로 측정 후 밀리초로 변환하는 것이 더 정확합니다.
Tip: $1 \text{ ms} = 1,000,000 \text{ ns}$
Java
public void measuredTask() {
long start = System.nanoTime();
// 로직 실행
doSomething();
long end = System.nanoTime();
// 나노초를 밀리초로 변환 (소수점까지 확인 가능)
double executionTime = (end - start) / 1_000_000.0;
System.out.printf("정밀 실행 시간: %.3f ms%n", executionTime);
}
3. Spring Framework를 사용 중이라면? (StopWatch)
만약 프로젝트 환경이 Spring이라면 StopWatch 클래스를 사용하여 훨씬 깔끔하고 구조적으로 측정할 수 있습니다. 여러 구간의 시간을 측정할 때 특히 유용합니다.
Java
import org.springframework.util.StopWatch;
public void springStopWatchExample() {
StopWatch stopWatch = new StopWatch("성능 테스트");
stopWatch.start("데이터 로딩");
// 로딩 로직...
stopWatch.stop();
stopWatch.start("데이터 처리");
// 처리 로직...
stopWatch.stop();
// 결과 요약 출력
System.out.println(stopWatch.prettyPrint());
System.out.println("총 소요 시간: " + stopWatch.getTotalTimeMillis() + "ms");
}
요약 및 주의사항
- currentTimeMillis vs nanoTime:
- currentTimeMillis()는 시스템의 현재 시각(Wall-clock time)을 기준으로 하므로, 실행 중에 시스템 시간이 변경되면 오차가 발생할 수 있습니다.
- 순수 실행 시간 측정이 목적이라면 시스템 시각과 무관하게 흐른 시간만 계산하는 System.nanoTime() 사용을 권장합니다.
- Warm-up: Java는 JVM의 JIT 컴파일러 특성상 함수가 처음 실행될 때보다 여러 번 반복 실행된 후의 속도가 더 빠릅니다. 정확한 벤치마킹을 원하신다면 함수를 여러 번 미리 실행(Warm-up)한 뒤 측정하는 것이 좋습니다.
'Java' 카테고리의 다른 글
| JAVA(Spring Boot) 로그인 기능 구현 방법 (0) | 2026.06.01 |
|---|---|
| java substring 함수(문자열 자르기) 사용법 및 예제 코드 (0) | 2026.05.15 |
| JAVA Session Life Cycle 세션 생명주기 내용 정리 (0) | 2026.05.11 |
| facebook graph api로 게시글 가져오기 (1) | 2019.09.23 |
| 구글, 파파고 번역 API 성능 비교 (1) | 2019.09.18 |
| google translate api v3 사용법 (1) | 2019.09.16 |
| java spring pwa fcm web push 구현 (2) | 2019.09.10 |
| Object 클래스에 대해 (0) | 2018.11.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 블루투스
- 클래스
- 리스트
- 정보처리기사
- Class
- 상속
- 알고리즘
- 아두이노
- Android
- String
- DB연동
- C언어
- 자료구조
- 자바
- C
- html
- OpenCV
- 문자열
- C++
- 배열
- 파일처리
- c#
- 문제풀이
- C++ 클래스
- 벡터
- 안드로이드
- 파이썬
- 데이터베이스
- Java
- MySQL
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함
반응형
