JVM Bellek Mimarisi

Java'da Kod Optimizasyonu

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

JVM nedir?

  • Platformdan bağımsız yürütme ortamı
  • Baytkodu (.class) makine koduna dönüştürür
  • Bellek yönetimi ve çöp toplama
  • Anında Derleme (JIT)
Java'da Kod Optimizasyonu

JVM bellek mimarisi genel bakış

JVM bellek mimarisi

Java'da Kod Optimizasyonu

Yığın (Stack) belleği

  • Metot yürütmesi ve yerel değişkenler için bellek alanı
  • LIFO (Son Giren İlk Çıkar) yapısı
  • Şunları saklar:
    • Yerel değişkenler
    • İlkel veri tipleri
    • Metot çağrı bilgileri
  • Boyut aşılırsa StackOverflowError oluşur
Java'da Kod Optimizasyonu

Öbek (Heap) belleği

  • Tüm nesneler ve diziler burada saklanır
  • new bir nesne oluşturur ve öbeğe ayırır
  • Çöp toplayıcı tarafından yönetilir
  • Dinamik boyut
  • Kuşaklara ayrılır
Java'da Kod Optimizasyonu

Belleğin işleyişi

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

String name = "Java"; // Heap
List<String> items = // Referans Stack'te new ArrayList<>(); // Nesne Heap'te
items.add(new String("Item")); // Nesne Heap'te }
Java'da Kod Optimizasyonu

Bellek dostu kodlama kalıpları

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

// Daha iyi
List<String> list2 = new ArrayList<>();
String s = "value";  // Tek nesne
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Java'da Kod Optimizasyonu

Özet

  • JVM bellek yönetimini başlıca yığın (stack) ve öbek (heap) ile yapar
  • Yığın belleği -> hızlıdır; ilkel tipler ve referansları tutar
  • Öbek belleği -> Nesneleri tutar
Java'da Kod Optimizasyonu

Hadi pratik yapalım!

Java'da Kod Optimizasyonu

Preparing Video For Download...