Метрики производительности и измерения

Оптимизация кода на 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...