Метрики продуктивності та вимірювання

Оптимізація коду в Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Поза межами вимірювань часу

  • Попередні відео
    • Вимірювання часу операцій
    • Керування пам'яттю в JVM
  • Далі за межі вимірювань часу
  • Метрики пам'яті
  • Метрики використання CPU
Оптимізація коду в Java

Метрики пам'яті через runtime

// Get the Runtime instance
Runtime runtime = Runtime.getRuntime();


// Memory metrics in bytes long totalMemory = runtime.totalMemory(); // Memory currently allocated long freeMemory = runtime.freeMemory(); // Memory that is unused long maxMemory = runtime.maxMemory(); // Maximum memory JVM will attempt to use
  • Усі повертають числа long, що означають байти
Оптимізація коду в Java

Розуміння метрик пам'яті

  • maxMemory(): Максимум, який JVM спробує використати (задається -Xmx)
  • totalMemory(): Пам'ять, наразі виділена JVM
  • freeMemory(): Невикористана пам'ять
  • usedMemory(): totalMemory - freeMemory
  • JVM може збільшувати totalMemory до maxMemory за потреби
Оптимізація коду в Java

Метрики пам'яті на практиці

// Create a utility method for readable memory values
public static double getUsedMemoryMB() {
    Runtime runtime = Runtime.getRuntime();
    long memory = runtime.totalMemory() - runtime.freeMemory();
    return memory / (1024.0 * 1024.0);  // Convert to MB
}

// After allocation
System.out.println("Memory used: " + getUsedMemoryMB() + " MB");
Memory used: 5.23 MB
Оптимізація коду в Java

Вимірювання використання CPU

import java.lang.management.*;

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

// Check if CPU time measurement is supported if (threadMXBean.isThreadCpuTimeSupported()) { // Enable CPU time measurement threadMXBean.setThreadCpuTimeEnabled(true); // Get CPU time in nanoseconds long cpuTimeNs = threadMXBean.getThreadCpuTime(Thread.currentThread().threadId()); }
Оптимізація коду в Java

Засоби профілювання Java

  • JVisualVM: Візуальний інтерфейс для моніторингу пам'яті, CPU тощо
  • jmap: Інструмент аналізу пам'яті у командному рядку
  • Ці інструменти виходять за межі простих метрик, що ми розглянули!
Оптимізація коду в Java

Давайте потренуємось!

Оптимізація коду в Java

Preparing Video For Download...