Memahami Arsitektur Memori JVM

Optimasi Kode di Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Apa itu JVM?

  • Lingkungan eksekusi lintas platform
  • Mengonversi bytecode (.class) ke kode mesin
  • Manajemen memori dan garbage collection
  • Kompilasi Just-In-Time
Optimasi Kode di Java

Gambaran arsitektur memori JVM

Arsitektur memori JVM

Optimasi Kode di Java

Memori stack

  • Area memori untuk eksekusi method dan variabel lokal
  • Struktur LIFO (Last-In-First-Out)
  • Menyimpan:
    • Variabel lokal
    • Tipe data primitif
    • Informasi pemanggilan method
  • StackOverflowError jika ukuran terlampaui
Optimasi Kode di Java

Memori heap

  • Menyimpan semua objek dan array
  • new membuat objek dan mengalokasikannya di heap
  • Dikelola oleh garbage collector
  • Ukuran dinamis
  • Dibagi menjadi generasi
Optimasi Kode di Java

Memori dalam praktik

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Optimasi Kode di Java

Pola kode hemat memori

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Optimasi Kode di Java

Ringkasan

  • JVM mengelola memori terutama melalui stack & heap
  • Memori stack -> cepat, menyimpan primitif dan referensi
  • Memori heap -> menyimpan objek
Optimasi Kode di Java

Ayo berlatih!

Optimasi Kode di Java

Preparing Video For Download...