CPU zamanını analiz etme
Hesaplamalar yapan bir finansal analiz uygulamasını optimize ediyorsun. İşlemci kullanımını tam olarak anlayabilmek için, farklı işlemlerin tükettiği CPU zamanını hassas biçimde ölçen bir yardımcı araç uygulaman gerekiyor; bu sayede hangi hesaplamaların gerçekten CPU yoğun olduğunu belirleyebileceksin.
Gerekli lang.management paketleri senin için içe aktarıldı.
Bu egzersiz, kursun bir parçasıdır
Java'da Kod Optimizasyonu
Egzersiz talimatları
ManagementFactorysınıfındanThreadMXBeanörneğini al.- Geçerli iş parçacığı için CPU süresini al.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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");
}
}