パフォーマンス指標と測定

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