ガベージコレクションと Just-In-Time(JIT)コンパイル

Java におけるコードの最適化

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

ガベージコレクションの基本

手動メモリ管理(C/C++)

  • プログラマーがメモリを明示的に確保・解放
  • メモリリークが発生しやすい

$$

Java のガベージコレクション

  • メモリを自動的に確保
  • 使用されなくなったオブジェクトを自動検出
  • メモリを自動的に解放
Java におけるコードの最適化

ガベージコレクションの仕組み

  • マーク:ルートから到達可能なオブジェクトを識別
  • スイープ:到達不可能なオブジェクトを削除

Screenshot 2025-05-11 at 6.58.38 PM.png

Java におけるコードの最適化

ガベージコレクションとパフォーマンス

GC のパフォーマンスにおけるトレードオフ

  • 開発は簡素化されますが、パフォーマンス面での考慮が必要です

$$

GC アルゴリズム

  • 最近の JVM には複数のガベージコレクションアルゴリズムが用意されています
  • 選択はアプリケーションの要件によって異なります
  • GC アルゴリズムの詳細な解説はこちら
1 https://www.baeldung.com/jvm-garbage-collectors
Java におけるコードの最適化

GC のパフォーマンスへの影響

// Bad - Creating many short-lived objects
for (int i = 0; i < 1000000; i++) {
    new Object(); // Immediately becomes garbage
}


// vs. Reusing objects Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Only one reference }
Java におけるコードの最適化

GC に配慮したコーディング

// Avoid this in performance-critical code
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Creates a new String each time
}


// Better approach StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Reuses the same buffer } String result = builder.toString();
Java におけるコードの最適化

Just-In-Time コンパイル

  • JVM の実行プロセス:
    • Java ソース → バイトコード
    • バイトコード → インタプリタ実行
    • 頻繁に実行されるメソッド → ネイティブマシンコード
  • 頻繁に実行されるコードを最適化
Java におけるコードの最適化

JIT に適したコードパターン

  • 予測可能なコードを書く
// Predictable branches help JIT optimization
if (value > 0) {
    // Code A - frequently taken path
} else {
    // Code B - rarely taken path
}
  • 焦点を絞った小さなメソッドを作成
  • 小さく頻繁に呼び出されるメソッドはインライン化に適しています
  • 複雑なコードは最適化の効果が低くなる場合があります
Java におけるコードの最適化

まとめ

  • パフォーマンスが重要な処理ではオブジェクト生成を最小限に抑える
  • JIT の最適化機能に適した、予測可能なコードを書く
  • まずプロファイリングを行い、本当に重要なコードを最適化する
Java におけるコードの最適化

練習しましょう!

Java におけるコードの最適化

Preparing Video For Download...