Java 코드의 실행 시간 구하기(시간 측정)

Java 코드를 실행시간 측정하는 3가지 방법에 대해서 알아본다.

개요

코딩을 하다 보면, 지연 시간 발생하거나 어느 구간이 느린지 실행 실행을 구하고 싶은 경우가 발생한다. 또는 내가 작성한 알고리즘이나 로직의 속도를 구하고 싶은 경우도 있다.

그밖에 여러 이유로 특정 구간에 코드 실행시간을 알아야 내는 3가지 방법에 대해 알아 보겠다.

System.currentTimeMillis()

Java에서 기본적으로 제공하는 System.currentTimeMillis() 메소드를 이용하면 현재 시간을 밀리세컨드 단위로 출력할 수 있다.
1970년 1월 1일 UTC 시간 기준으로 현재까지의 시간 차이를 밀리 세컨드 단위로 출력한 값이다.

이 메소드를 사용하여 시작 구간과 끝나는 구간에 각각 해당 함수를 써서 시간을 받아오고, 두 시간간의 차이를 계산하면 ms 단위의 시간차를 구할 수 있다.

long beforeTime = System.currentTimeMillis(); // 코드 실행 전에 시간 받아오기
        
// 측정하려는 코드...
        
long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
long diffTime = afterTime - beforeTime; // 두 개의 실행 시간
System.out.println("실행 시간(ms): " + diffTime); // 세컨드(초 단위 변환)

ms를 초(s)로 변환하고 싶다면 1000을 나누주면 된다. 추가로 초(s)를 분(m) 구하고 싶다면 60을 추가로 나누주면 된다.

사용 예시는 아래와 같다.

package com.devkuma.basic.executetime;

public class ExecuteTime {
    public static void main(String[] args) {
        long beforeTime = System.currentTimeMillis(); // 코드 실행 전에 시간 받아오기

        int sum = 0;
        for (int i = 0; i < 100000; i++) {
            for (int j = 0; j < 50000; j++) {
                sum += i * j;
            }
        }
        System.out.println(sum);

        long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
        long diffTimeSec = (afterTime - beforeTime) / 1000; // 두 개의 실행 시간
        System.out.println("실행 시간(sec): " + diffTimeSec); // 세컨드(초 단위 변환)
    }
}

실행 결과:

실행 시간(sec) : 1

Instant

Instant는 자바 8부터 java.time에 패키지에 추가된 클래스로 EPOCH부터 경과된 시간을 나노초 단위로 표현한다.

Instant beforeTime = Instant.now();  // 코드 실행 전에 시간 받아오기

// 측정하려는 코드...

Instant afterTime = Instant.now();
long diffTime = Duration.between(beforeTime, afterTime).toMillis(); // 두 개의 실행 시간
System.out.println("실행 시간(ms): " + diffTime);

StopWatch - spring

또 다른 방법은 Apache의 commons-lang3 라이브러리에 포함되어 있는 StopWatch를 이용하는 방법이다.

Apache의 commons-lang3 라이브러리 사용하기 위해서는 dependency에 먼저 gradle이나 maven를 추가해 줘야 한다.

gradle

implementation 'org.apache.commons:commons-lang3:3.12.0'

maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
StopWatch stopWatch = new StopWatch();
stopWatch.start();

// 측정하려는 코드...

stopWatch.stop();
System.out.println("실행 시간(ms): " + stopWatch.getTotalTimeMillis());
System.out.println(stopWatch.prettyPrint());



최종 수정 : 2023-04-02