效能指標與量測

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...