Garbage collection & kompilasi Just-In-Time (JIT)

Optimasi Kode di Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage collection - dasar

Manajemen Memori Manual (C/C++)

  • Programmer mengalokasikan & membebaskan memori secara eksplisit
  • Rentan kebocoran

$$

Garbage Collection di Java

  • Alokasi memori otomatis
  • Deteksi objek tidak terpakai otomatis
  • Pemulihan memori otomatis
Optimasi Kode di Java

Cara kerja garbage collection

  • Mark: Identifikasi objek yang dapat dijangkau dari root
  • Sweep: Hapus objek yang tidak dapat dijangkau

Tangkapan layar 2025-05-11 pukul 18.58.38.png

Optimasi Kode di Java

Garbage collection dan performa

Trade-off Performa GC

  • Memudahkan pengembangan, tetapi ada dampak performa

$$

Algoritma GC

  • JVM modern menawarkan beberapa algoritma garbage collection
  • Pilihan bergantung pada kebutuhan aplikasi
  • Panduan mendalam tentang algoritma GC tersedia di sini
1 https://www.baeldung.com/jvm-garbage-collectors
Optimasi Kode di Java

Dampak performa GC

// Buruk - Membuat banyak objek berumur pendek
for (int i = 0; i < 1000000; i++) {
    new Object(); // Langsung menjadi sampah
}


// vs. Menggunakan ulang objek Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Hanya satu referensi }
Optimasi Kode di Java

Penulisan kode ramah GC

// Hindari ini pada kode kritis performa
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Membuat String baru tiap iterasi
}


// Pendekatan yang lebih baik StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Gunakan buffer yang sama } String result = builder.toString();
Optimasi Kode di Java

Kompilasi Just-In-Time

  • Proses eksekusi JVM:
    • Kode sumber Java -> Bytecode
    • Bytecode -> Eksekusi terinterpretasi
    • Metode panas -> Kode mesin native
  • Mengoptimalkan kode yang sering dijalankan
Optimasi Kode di Java

Pola kode ramah JIT

  • Tulis kode yang dapat diprediksi
// Cabang yang dapat diprediksi membantu optimasi JIT
if (value > 0) {
    // Kode A - jalur sering diambil
} else {
    // Kode B - jarang diambil
}
  • Buat metode yang fokus dan kecil
  • Metode kecil dan sering dipanggil ideal untuk inlining
  • Kode kompleks cenderung kurang optimal
Optimasi Kode di Java

Ringkasan

  • Minimalkan pembuatan objek pada jalur kritis performa
  • Tulis kode yang dapat diprediksi dan selaras dengan kemampuan optimasi JIT
  • Fokus optimasi pada kode yang penting dengan profiling terlebih dahulu
Optimasi Kode di Java

Ayo berlatih!

Optimasi Kode di Java

Preparing Video For Download...