JVM

JVM (Java Sanal Makinesi), Java kodunun “bir kere yaz, her yerde çalıştır” (Write Once, Run Anywhere) felsefesini hayata geçiren bir motordur. Temelde bir bilgisayar içinde simüle edilmiş sanal bir bilgisayar gibi davranır.

Süreç Özeti (Workflow)

  1. Derleme: .java dosyası Java Compiler (javac) ile .class (Bytecode) dosyasına dönüşür.
  2. Yükleme: Class Loader bu bytecode’u JVM belleğine taşır.
  3. Çalıştırma: Execution Engine, bytecode’u yorumlayarak veya derleyerek işlemciye gönderir.

JVM’in çalışma sürecini üç ana aşamada inceleyebiliriz:


1. Sınıf Yükleyici (Class Loader)

Java kodunuzu derlediğinizde oluşan .class dosyaları (Bytecode), JVM tarafından ihtiyaç duyuldukça belleğe yüklenir.

  • Loading: Sınıf dosyalarını bulur ve içeriğini okur.
  • Linking: Kodun doğruluğunu kontrol eder (Verification), statik değişkenler için yer ayırır (Preparation) ve sembolik referansları bellekteki gerçek adreslere çözer (Resolution).
  • Initialization: Sınıf içindeki statik blokları çalıştırır ve statik değişkenlere ilk değerlerini atar.

2. Çalışma Zamanı Veri Alanları (Runtime Data Areas)

JVM, işletim sisteminden aldığı belleği beş ana bölgeye ayırır:

  • Method Area: Sınıf yapıları, metot verileri ve statik değişkenlerin tutulduğu paylaşımlı alandır.
  • Heap: Tüm nesnelerin ve dizilerin yaşadığı ortak alandır. Nesneler Heap’te, yerel değişkenler Stack’te yaşar.
  • Stack: Her thread için özeldir. Yerel değişkenleri ve metot çağrılarını tutar.
  • PC Register: O an çalışan thread’in hangi komut satırında olduğunu takip eden bir sayaçtır.
  • Native Method Stack: Java dışındaki dillerle (C/C++ gibi) yazılmış metotların çalışması için ayrılan alandır.

3. Yürütme Motoru (Execution Engine)

Belleğe yüklenen Bytecode’un fiziksel makinenin anlayacağı makine diline dönüştürüldüğü yerdir:

  • Interpreter (Yorumlayıcı): Bytecode komutlarını satır satır okur ve çalıştırır. Başlangıçta hızlıdır ancak aynı kod tekrar tekrar çalıştığında yavaş kalabilir.
  • JIT Compiler (Just-In-Time): Interpreter’ın yavaşlığını giderir. Sık kullanılan “sıcak” kod parçalarını (hotspots) tespit eder, bunları bir kez makine diline derler ve önbelleğe alır. Böylece uygulama çalıştıkça hızlanır.
  • Garbage Collector (GC): Heap alanını tarayarak artık kullanılmayan nesneleri temizler ve belleği yönetir.

Süreç Özeti (Workflow)

  1. Derleme: .java dosyası Java Compiler (javac) ile .class (Bytecode) dosyasına dönüşür.
  2. Yükleme: Class Loader bu bytecode’u JVM belleğine taşır.
  3. Çalıştırma: Execution Engine, bytecode’u yorumlayarak veya derleyerek işlemciye gönderir.

Kritik Bilgi: JVM, donanım ve işletim sisteminden bağımsızdır. Windows için ayrı, Linux için ayrı JVM vardır; ancak hepsi aynı Java Bytecode’u çalıştırabilir. Bu sayede kodunuz platform bağımsız hale gelir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.