logo

JVM (Java Sanal Makinesi) Mimarisi

  1. Java Sanal Makinesi
  2. JVM'nin İç Mimarisi

JVM (Java Virtual Machine) soyut bir makinedir. Java bayt kodunun çalıştırılabileceği çalışma zamanı ortamını sağlayan bir spesifikasyondur.

JVM'ler birçok donanım ve yazılım platformu için mevcuttur (yani JVM, platforma bağlıdır).

JVM Nedir?

Bu:

  1. Bir spesifikasyon Java Sanal Makinesinin çalışmasının belirtildiği yer. Ancak uygulama sağlayıcısı algoritmayı seçme konusunda bağımsızdır. Uygulaması Oracle ve diğer şirketler tarafından sağlanmıştır.
  2. Bir uygulama Uygulaması JRE (Java Runtime Environment) olarak bilinir.
  3. Çalışma Zamanı Örneği Java sınıfını çalıştırmak için komut istemine Java komutunu yazdığınızda, JVM'nin bir örneği oluşturulur.

Bu ne yapar

JVM aşağıdaki işlemi gerçekleştirir:

  • Kodu yükler
  • Kodu doğrular
  • Kodu çalıştırır
  • Çalışma zamanı ortamı sağlar

JVM aşağıdakiler için tanımlar sağlar:

  • Bellek alanı
  • Sınıf dosya formatı
  • Kayıt seti
  • Çöp toplanan yığın
  • Önemli hata raporlama vb.

JVM Mimarisi

JVM'nin iç mimarisini anlayalım. Sınıf yükleyici, hafıza alanı, yürütme motoru vb. içerir.

JVM Mimarisi

1) Sınıf Yükleyici

Classloader, sınıf dosyalarını yüklemek için kullanılan bir JVM alt sistemidir. Java programını çalıştırdığımızda ilk önce sınıf yükleyici tarafından yüklenir. Java'da üç yerleşik sınıf yükleyici vardır.

    Bootstrap ClassLoader: Bu, Extension sınıf yükleyicisinin süper sınıfı olan ilk sınıf yükleyicidir. Şunu yükler: rt.jar Java.lang paket sınıfları, Java.net paket sınıfları, Java.util paket sınıfları, Java.io paket sınıfları, Java.sql paket sınıfları vb. gibi Java Standard Edition'ın tüm sınıf dosyalarını içeren dosya.Uzantı ClassLoader: Bu, Bootstrap'in alt sınıf yükleyicisi ve System sınıf yükleyicisinin ana sınıf yükleyicisidir. İçinde bulunan jar dosyalarını yükler $JAVA_HOME/jre/lib/ext dizin.Sistem/Uygulama Sınıfı Yükleyici: Bu Extension sınıf yükleyicisinin alt sınıf yükleyicisidir. Sınıf dosyalarını sınıf yolundan yükler. Varsayılan olarak sınıf yolu geçerli dizine ayarlanmıştır. '-cp' veya '-classpath' anahtarını kullanarak sınıf yolunu değiştirebilirsiniz. Aynı zamanda Uygulama sınıf yükleyicisi olarak da bilinir.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
Şimdi Test Edin

Çıktı:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Bunlar Java tarafından sağlanan dahili sınıf yükleyicilerdir. Kendi sınıf yükleyicinizi oluşturmak istiyorsanız ClassLoader sınıfını genişletmeniz gerekir.

2) Sınıf(Yöntem) Alanı

Sınıf(Yöntem) Alanı, çalışma zamanı sabit havuzu, alan ve yöntem verileri, yöntem kodları gibi sınıf başına yapıları saklar.

3) Yığın

Nesnelerin tahsis edildiği çalışma zamanı veri alanıdır.

4) Yığın

Java Stack çerçeveleri saklar. Yerel değişkenleri ve kısmi sonuçları tutar ve yöntem çağırma ve geri dönüşte rol oynar.

Her iş parçacığının, iş parçacığıyla aynı anda oluşturulan özel bir JVM yığını vardır.

Bir yöntem her çağrıldığında yeni bir çerçeve oluşturulur. Yöntem çağrısı tamamlandığında bir çerçeve yok edilir.

5) Program Sayaç Kaydı

PC (program sayacı) kaydı, o anda yürütülmekte olan Java sanal makine komutunun adresini içerir.

6) Yerel Yöntem Yığını

Uygulamada kullanılan tüm yerel yöntemleri içerir.

7) Yürütme Motoru

Bu içerir:

    Sanal işlemci Tercüman:Bayt kodu akışını okuyun ve ardından talimatları yürütün.Tam Zamanında (JIT) derleyicisi:Performansı arttırmak için kullanılır. JIT, bayt kodunun benzer işlevselliğe sahip kısımlarını aynı anda derler ve dolayısıyla derleme için gereken süreyi azaltır. Burada 'derleyici' terimi, bir Java sanal makinesinin (JVM) talimat setinden belirli bir CPU'nun talimat setine bir çeviriciyi ifade eder.

8) Java Yerel Arayüzü

Java Yerel Arayüzü (JNI), C, C++, Assembly vb. gibi başka bir dilde yazılmış başka bir uygulamayla iletişim kurmak için bir arayüz sağlayan bir çerçevedir. Java, Konsola çıktı göndermek veya işletim sistemi kitaplıkları ile etkileşimde bulunmak için JNI çerçevesini kullanır.