शुरू करेंमुफ़्त में शुरू करें

CPU time का विश्लेषण

आप एक फाइनेंशियल एनालिसिस एप्लिकेशन को ऑप्टिमाइज़ कर रहे हैं जो कैलकुलेशन करता है। प्रोसेसर उपयोग को सटीक रूप से समझने के लिए, आपको ऐसा यूटिलिटी इम्प्लीमेंट करनी है जो अलग-अलग ऑपरेशनों द्वारा खपत किए गए सटीक CPU time को मापे। इससे आप पहचान पाएँगे कि कौन-सी कैलकुलेशन सच में CPU-इंटेंसिव हैं।

ज़रूरी lang.management पैकेज आपके लिए इम्पोर्ट कर दिए गए हैं.

यह अभ्यास पाठ्यक्रम का हिस्सा है

Java में कोड ऑप्टिमाइज़ करना

पाठ्यक्रम देखें

अभ्यास निर्देश

  • ManagementFactory क्लास से ThreadMXBean इंस्टेंस प्राप्त करें।
  • करंट थ्रेड का CPU time प्राप्त करें.

इंटरैक्टिव व्यावहारिक अभ्यास

इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।

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");
    }
}
कोड संपादित करें और चलाएँ