0Pricing
Java Academy · 강의

워밍업과 반복

안정 상태의 성능을 측정합니다

워밍업과 반복은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

워밍업과 반복 실행

JMH는 안정 상태의 성능, 즉 JVM이 코드를 완전히 최적화한 후 코드가 도달하는 속도를 측정합니다. 이를 위해 먼저 버리는 워밍업 반복 실행을 수행한 다음 실제 측정 반복 실행을 수행합니다. 이 레슨에서는 두 설정을 조정하는 방법을 다룹니다.

워밍업이 필요한 이유

초기 호출은 해석되어 실행되므로 느립니다. JIT가 자주 실행되는 메서드를 컴파일하면 호출 속도가 훨씬 빨라집니다. 느린 시작 구간을 수치에 포함하면 측정값이 부풀려집니다. 워밍업 반복 실행은 코드를 실행하지만 그 시간은 버려집니다.

@Warmup

@Warmup은 버리는 단계를 제어합니다. 반복 실행 횟수와 각 반복 실행의 시간을 설정합니다.

import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;

public class Bench {
    @Benchmark
    @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    public int work() {
        return 7 * 6;
    }
}

@Measurement

@Measurement는 실제로 기록하는 단계를 제어합니다. 반복 실행 횟수를 늘리면 신뢰 구간이 좁아지지만 실행 시간이 길어집니다.

import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;

public class Bench {
    @Benchmark
    @Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
    public int work() {
        return 7 * 6;
    }
}

반복 실행과 연산의 차이

용어에 주의하세요. 반복 실행은 시간을 측정하는 구간입니다(예: 1초). 각 구간 안에서 JMH는 가능한 한 여러 번 벤치마크 메서드를 호출하며, 각 호출이 하나의 연산입니다. 점수는 연산당으로 보고됩니다.

워밍업은 몇 번이면 충분할까요

반복 실행별 출력을 살펴보세요. 연속된 워밍업 반복 실행의 결과가 더 이상 변하지 않으면 JIT가 안정된 것입니다. 처음 몇 번의 측정 반복 실행에서도 결과가 계속 변한다면 워밍업을 더 추가하세요. 워밍업 5회와 측정 10회가 일반적인 시작점입니다.

포크 실행은 워밍업을 늘립니다

각 포크는 완전히 새로운 JVM이므로 각 포크에서 전체 워밍업이 반복됩니다. 여러 포크를 실행하면 JIT 프로파일을 서로 격리할 뿐 아니라 JVM 간 변동도 확인할 수 있어 안정성을 가장 정직하게 측정할 수 있습니다.

import org.openjdk.jmh.annotations.*;

@Fork(3)
@Warmup(iterations = 5)
@Measurement(iterations = 10)
public class Bench {
    @Benchmark
    public double sqrt() {
        return Math.sqrt(2.0);
    }
}

효과 확인하기

이 단순한 Java 반복문은 배치별 시간을 출력합니다. JIT가 메서드를 컴파일하면서 첫 번째 배치들이 이후 배치보다 느리게 실행되는 모습을 자주 볼 수 있습니다. 바로 이 효과를 워밍업 단계에서 버립니다.

public class Main {
    static long busy(int n) {
        long s = 0;
        for (int i = 0; i < n; i++) s += (long) Math.sqrt(i);
        return s;
    }
    public static void main(String[] args) {
        for (int batch = 0; batch < 5; batch++) {
            long t = System.nanoTime();
            long r = busy(2_000_000);
            System.out.println("batch " + batch + ": "
                + (System.nanoTime() - t) / 1000 + " us, r=" + r);
        }
    }
}

시간 기준과 횟수 기준

기본적으로 반복 실행은 시간 기준입니다(N초 동안 실행). batchSize와 단일 실행 모드를 사용하면 고정된 연산 횟수로 전환할 수 있지만, 컴퓨터 속도에 맞춰 조정되므로 시간 기준이 일반적입니다.

과도하게 조정하지 마세요

안정 상태에 도달한 뒤에는 실행 시간이 매우 길어져도 정확도가 크게 향상되지 않고 시간만 더 걸립니다. 반복 실행 횟수를 최대로 늘리기보다 포크 간에 안정적이고 재현 가능한 수치를 얻는 것을 목표로 하세요. 한 번의 인상적인 수치보다 재현성이 중요합니다.

안정화 과정 읽기

JMH는 실행 중 각 반복 실행의 점수를 출력합니다. 건전한 벤치마크에서는 워밍업 반복 실행의 결과가 수렴하고, 측정 반복 실행의 결과가 최종 점수 주변에 작은 +/- 오차와 함께 밀집됩니다.

빠른 확인

워밍업과 반복 실행을 얼마나 이해했는지 확인해 보세요.

복습

안정 상태의 성능을 측정하는 방법을 배웠습니다:

  • @Warmup은 JIT가 컴파일할 수 있도록 버리는 반복 실행을 수행합니다.
  • @Measurement는 기록할 반복 실행을 수행합니다. 횟수를 늘리면 오차 범위가 좁아집니다.
  • 반복 실행은 시간을 측정하는 구간이고, 그 안의 각 호출은 하나의 연산입니다.
  • 여러 @Fork는 새로운 JVM에서 워밍업을 반복하고 JVM 간 변동을 보여 줍니다.
  • 실행 시간을 최대로 늘리기보다 재현 가능하고 안정적인 점수를 목표로 하세요.

자주 묻는 질문

“워밍업과 반복” 강의는 무료인가요?

네 — “워밍업과 반복” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“워밍업과 반복”에서 뭘 배우나요?

안정 상태의 성능을 측정합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“워밍업과 반복” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. JMH가 필요한 이유
  2. 벤치마크 작성
  3. 워밍업과 반복
  4. 죽은 코드 제거 방지
← Java Academy(으)로 돌아가기