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:
- 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.
- Bir uygulama Uygulaması JRE (Java Runtime Environment) olarak bilinir.
- Ç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.
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.
//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:
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.