시작하기무료로 시작하기

CPU 시간 분석하기

계산을 수행하는 재무 분석 애플리케이션을 최적화하고 있어요. 프로세서 사용량을 정확히 파악하려면, 각 연산이 소모한 정확한 CPU 시간을 측정하는 유틸리티를 구현해야 해요. 이를 통해 어떤 계산이 실제로 CPU 집약적인지 식별할 수 있어요.

필요한 lang.management 패키지는 이미 가져와 두었습니다.

이 연습은 강의의 일부입니다

Java 코드 최적화

강의 보기

연습 안내

  • ManagementFactory 클래스에서 ThreadMXBean 인스턴스를 가져오세요.
  • 현재 스레드의 CPU 시간을 가져오세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

public class Main {
    public static long getCpuTimeNano() {
        // Retrieve the ThreadMXBean instance
        ThreadMXBean threadMXBean = ____.____()
        if (threadMXBean.isThreadCpuTimeSupported()) {
            threadMXBean.setThreadCpuTimeEnabled(true);
            // Return the current thread CPU time
            return ____(Thread.currentThread().threadId());
        } else {
            System.out.println("CPU time measurement not supported");
            return 0;
        }
    }
    
    public static long calculateSum(long n) {
        long sum = 0;
        for (long i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
    
    public static long calculateSquareSum(long n) {
        long sum = 0;
        for (long i = 1; i <= n; i++) {
            sum += i * i;
        }
        return sum;
    }
    
    public static void main(String[] args) {
        long n = 100_000_000; // 100 million
        long startSum = getCpuTimeNano();
        long sum = calculateSum(n);
        long endSum = getCpuTimeNano();
        System.out.println("CPU time for sum: " + 
                          ((endSum - startSum) / 1_000_000.0) + " ms");
        long startSquareSum = getCpuTimeNano();
        long squareSum = calculateSquareSum(n);
        long endSquareSum = getCpuTimeNano();
        System.out.println("CPU time for square sum: " + 
                          ((endSquareSum - startSquareSum) / 1_000_000.0) + " ms");
        double ratio = (endSquareSum - startSquareSum) / (double)(endSum - startSum);
        System.out.println("Square sum takes " + ratio + 
                          " times more CPU time than regular sum");
    }
}
코드 편집 및 실행