CodeBlanks Logo Icon CodeBlanks

Özet - JVM internals

Sınıf yükleyici, bytecode ve JIT'i birleştirerek bir JVM inceleme yazarsın.

Özet - JVM internals

Bu grupta JVM mimarisini, sınıf yükleyiciyi, bayt kodunu, JIT derleyiciyi ve çalışma zamanı veri alanlarını gördün. JVM; sınıf yükleyici, veri alanları ve uygulama motorundan oluşur.

Şimdi bunları bir mini görevde birleştireceksin: bir metot tanımlayıp sonucunu yazdıracak ve aynı kod parçası üzerinde Java sürümünü ve ana parçacık adını yazdıracaksın. Bu, JVM'in çalışma zamanında nasıl gozlemledigini göstermektedir.

Uygulama JVM bilgilerini yazdır

Bir Main sınıfı tanımla. main yönteminde üç satır yazdır: (1) Runtime.version().feature() sonucu, (2) Thread.currentThread().getName() sonucu, (3) String.class.getClassLoader() sonucu. Her biri ayrı bir System.out.println çağrısı olsun.

Başlangıç kodu

Main.java
public class Main {
    public static void main(String[] args) {
        // Java surumunu, parçacık adini ve String yukleyicisini yazdır
    }
}

Örnek çözüm

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println(Runtime.version().feature());
        System.out.println(Thread.currentThread().getName());
        System.out.println(String.class.getClassLoader());
    }
}

Beklenen çıktı

21
main
null

Sırada ne var?

JVM'in temel mekanizmalarını öğrendin. Sonraki grupta hafıza modelini (memory model), happens-before ilişkisini, volatile ve final alanlarının garantilerini ve Metaspace bölgesini inceleyeceksin.

Bu grup; JVM mimarisi, sınıf yükleyici, bayt kodu, JIT ve veri alanlarını bir araya getirdi. Bir sonraki adımda eşzamanlı parçacıkların göreceliliğini ve görünürlük ilkelerini keşfedeceksin.

Uygulama Özet: metot ve sürüm

Yeni bir Summary sınıfı tanımla. int double_it(int n) metodu ekle; n * 2 döndürsün. main yönteminde double_it(21) çağrısını yap ve sonucu yazdır. Ayrıca Runtime.version().feature() sonucunu da yazdır.

Başlangıç kodu

Main.java
public class Summary {
    // int dönen bir metot tanımla (n parametresi)

    public static void main(String[] args) {
        // metodu 21 ile çağır ve Java sürümünü yazdır
    }
}

Örnek çözüm

Main.java
public class Summary {
    int double_it(int n) {
        return n * 2;
    }
    public static void main(String[] args) {
        Summary s = new Summary();
        System.out.println(s.double_it(21));
        System.out.println(Runtime.version().feature());
    }
}

Beklenen çıktı

42
21

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir metot sık çağrılınca JIT ne yapar?

  • Metodu siler
  • Metodu yorumlamayı bırakır
  • Metodu başka sınıfa taşır
  • Metodu makine koduna derler Doğru cevap

Açıklama: JIT sıcak metotları makine koduna derler.

2 JVM özetini eşleştir

Kavram Anlamı
Runtime.version() Java sürümünü verir
String.class.getClassLoader() null döndürür
Thread.currentThread() Şu anki parçacık
javap -c Bayt kodu gösterir

Uzman bölümündeki tüm dersler