close

Java Sanal Makinesi

Navigasyona git Aramaya git
Image
Java Sanal Makinesinde çalışan bir programın genel mimarisinin şeması.

Java sanal makinesi (İngilizce Java Virtual Machine , JVM'de ), yerel bir işlem sanal makinesidir , yani belirli bir platformda yürütülebilir, özel bir ikili kodda ( Java bayt kodu ) ifade edilen talimatları yorumlayabilir ve yürütebilir. Java dili derleyicisi tarafından oluşturulur .

Java ikili kodu, yüksek seviyeli bir dil değil, fiziksel bir mikroişlemci için giriş dili olarak bile geçerli olan gerçek düşük seviyeli makine kodudur . Java bulmacasının tüm parçaları gibi, orijinal olarak Sun tarafından geliştirilmiştir.

JVM, Java platformunun temel parçalarından biridir . Temel olarak uygulamanın çalıştırılması amaçlanan sistemin donanımından daha yüksek bir seviyede bulunur ve bu hem bayt kodunu hem de çalıştırılması amaçlanan sistemi anlayan bir köprü görevi görür. Bu nedenle, bir Java uygulaması yazıldığında, belirli bir Java sanal makinesinde yürütüleceği düşünülerek yapılır, bu sonuçta bayt kodundan nihai cihazın yerel koduna dönüşendir.

Java sanal makinesinin en büyük avantajı dile taşınabilirlik sağlamasıdır, böylece Sun Microsystems farklı mimariler için farklı Java sanal makineleri oluşturmuştur ve böylece Windows'ta yazılmış bir .class programı bir Linux ortamında yorumlanabilir . Bu ortamlar için yalnızca söz konusu sanal makineye sahip olmak gerekir. Bu nedenle Java'yı takip eden ünlü aksiyom: "Bir kez yaz, her yerde çalıştır" veya "Bir kez yaz, her yerde çalıştır".

Ancak Java ve türev ürünlerine sahip olan şirketin, Java bayt kodunu makine dili olarak kabul eden mikroişlemciler oluşturma girişimleri büyük ölçüde başarısız oldu.

Java Sanal Makinesi yazılım, donanım, geliştirme aracı veya bir web tarayıcısında uygulanabilir; platformlar arası platformdan bağımsız olan önceden derlenmiş bayt kodunu okur ve yürütür . JVM, komut seti, kayıt seti, sınıf dosya formatı, yığın, çöp toplayıcı içeren bir yığın ve bir bellek alanı için tanımlar sağlar . SUN tarafından onaylanan herhangi bir JVM uygulaması , spesifikasyona uyan herhangi bir sınıfı yürütebilmelidir.

Java Sanal Makinesi'nin kronolojik sırayla birkaç sürümü vardır. Genel olarak, Java bayt kodunun tanımı sürümler arasında önemli ölçüde değişmez ve değişirse , dil geliştiricileri önceki ürünlerle geriye dönük uyumluluk sağlamaya özen gösterir .

J2SE 5.0'dan itibaren, JVM spesifikasyonundaki değişiklikler Java Community Process (JCP) himayesi altında geliştirildi ve JSR 924'te belirtildi. [ 1 ] 2006'dan beri, sınıf dosya formatındaki (JSR) değişiklikleri desteklemek için spesifikasyonda yapılan değişiklikler 202 [ 2 ] ​) JSR 924'teki bir bakım yayınında gerçekleştirilmektedir. JVM'nin spesifikasyonları "mavi kitap" olarak bilinen kitapta yayınlanmaktadır. [ 3 ]​ Böylece önsöz şöyledir: Bu belirtimin, uygulamaları sıfırdan mümkün kılmak için Java Sanal Makinesini yeterince belgelediğini umuyoruz. Sun, Java Sanal Makinesi uygulamalarının doğru çalıştığını doğrulayan testler sağlar.

Kaffe, sıfırdan bir JVM uygulamasının bir örneğidir. Sun, spesifikasyonlarına uygun ve tam uyumlu uygulamaları onaylamak için kullandığı "Java" ticari markasının sahibidir. Sun, 2010 yılında Oracle Corporation tarafından satın alındı.

Çalışma zamanı ortamı

Bir Java Sanal Makinesinde bir uygulamayı çalıştırmak için, program kodunun, genellikle .class uzantılı dosyalar biçiminde, standartlaştırılmış bir taşınabilir ikili biçimde derlenmesi gerekir. Bir program birden çok sınıftan oluşabilir, bu durumda her sınıfın kendisiyle ilişkilendirilmiş kendi .class dosyası olacaktır. Uygulamaları dağıtmayı kolaylaştırmak için sınıf dosyaları jar formatlı bir dosyada birlikte paketlenebilir. Bu fikir, ilk Java uygulamaları sırasında ortaya çıktı. Bu uygulamalar, ihtiyaç duydukları sınıf dosyalarını çalışma zamanında indirebilir ve bu da hızın önemli olduğu bir çağda ağ üzerinde önemli bir yük oluşturur. Paketleme, gerekli parçaların her biri için bağlantıları sürekli olarak açıp kapatarak ek yükü önler.

Derlemeden elde edilen kod, talimat setinin öykünmesini gerçekleştiren JVM tarafından, ya bir yorumlama işlemi yoluyla ya da daha yaygın olarak Sun'ın HotSpot'u gibi bir JIT (Tam Zamanında) derleyicisi aracılığıyla yürütülür. Bu son seçenek, bayt kodunu hedef platformun yerel koduna dönüştürür ve bu da çok daha hızlı yürütmeye olanak tanır. Dezavantajı, derleme için başlangıçta gereken süredir.

Geniş anlamda, Java Sanal Makinesi, derleme çıktısı (bayt kodu) ile uygulamanın üzerinde çalıştığı sistem arasında bir köprü görevi görür. İster cep telefonu, ister Windows XP PC veya mikrodalga fırın olsun, her cihaz için belirli bir JVM olmalıdır. Her durumda, her sanal makine hedef platformun talimat setini bilir ve Java dilinde yazılmış bir kodu (herkes için ortak) platform donanımının anlayabileceği yerel koda çevirir.

Bayt kodu denetleyicisi

JVM, çalıştırmadan önce bunu tüm bayt kodları için "kontrol eder". Bu, yalnızca sınırlı sayıda bayt kodu dizisinin geçerli programlar oluşturduğu anlamına gelir; örneğin, bir JUMP (dal) ifadesi, aynı işlev içinde yalnızca bir ifadeye işaret edebilir. Bu nedenle, JVM'nin bir yığın mimarisi olması gerçeği, bir JIT derleyicisi kullanırken yazmaç tabanlı mimariler üzerinde öykünme için bir hız yükü anlamına gelmez: Kayıtları hayali adlarla veya konumlarıyla adlandırırsanız, bir JIT derleyicisi için hiçbir fark yaratmaz. hedef mimarinin kayıtlarına tahsis edilmesi gereken hayali yığınlar. Aslında, kod doğrulama, JVM'yi, bir JIT derleyicisi ile verimli öykünmesi daha karmaşık olan ve tipik olarak daha yavaş bir yorumlayıcı tarafından gerçekleştirilen klasik bir yığın mimarisinden farklı kılar.

Kod doğrulama ayrıca rastgele bit desenlerinin adres olarak kullanılamamasını da sağlar. Bir Bellek Yönetim Birimi'ne ( "MMU" ) gerek kalmadan bellek koruması sağlanır . Bu nedenle JVM, MMU'ları olmayan yongalarda bellek koruması elde etmenin etkili bir yoludur.

Bayt kodları

JVM, aşağıdaki görev grupları için talimatlara sahiptir:

  • şarj ve depolama
  • Aritmetik
  • Tür Dönüştürme
  • Nesne oluşturma ve işleme
  • Yığın yönetimi ( itme ve açma )
  • Kontrol transferleri ( dallanma )
  • Yöntemleri çağırma ve geri dönme
  • istisnalar

Anahtar ikili uyumluluktur. Belirli bir ana bilgisayardaki her işletim sistemi, kendi JVM'sine ve çalışma zamanı uygulamasına ihtiyaç duyar. Bu JVM'ler, bayt kodunu anlamsal olarak aynı şekilde yorumlar, ancak gerçek uygulama değişebilir. Her bir ana bilgisayar işletim sistemi için eşlenmesi gereken Java API'lerinin uyumlu ve verimli uygulanması, bayt kodu öykünmesinden daha karmaşıktır.

Güvenli uzaktan kod uzantısı

Sanal makine mimarisi, kodun makine içinde yapabileceği eylemler üzerinde ayrıntılı kontrol sağlar. Bu, uzak kaynaklardan güvenilmeyen kodun güvenli bir şekilde yürütülmesine izin vermek için tasarlanmıştır; çok ünlü bir kullanılan model Java uygulamalarıdır . Uygulamalar, kullanıcının tarayıcısına gömülü bir VM içinde çalışır ve uzak bir HTTP sunucusundan indirilen kodu yürütür. Uzak kod , kullanıcıyı kötü veya kötü niyetli kodlardan korumak için tasarlanmış oldukça kısıtlı bir " sandbox " içinde çalışır. Yeterli finansal kaynağa sahip yayıncılar, kendilerini "güvenli" olarak nitelendiren dijital olarak imzalanmış uygulamalar yapmak için bir sertifika alabilirler ve ardından sanal alandan çıkmalarına ve muhtemelen kullanıcı kontrolü altında yerel dosya sistemine ve ağ sistemine erişmelerine izin verebilirler.

Sanal makine uygulamaları

J2SE sürümü, sanal makinenin iki uygulamasına sahiptir:

  • Java HotSpot Client VM: Örneğin bir Java uygulamasının başlatma süresinin en aza indirilmesi gibi uygulamaların istemci ortamında yürütülmesinde maksimum performansı elde etmek için hazırlanmış varsayılan sanal makine.
  • Java HotSpot Server VM: Sunucu ortamında uygulamaların yürütülmesinde maksimum performansı elde etmek için hazırlanmıştır.

Ayrıca

Referanslar

  1. JSR 924 – J2SE 5.0 ile başlayan JVM belirtimindeki değişiklikleri belirtir
  2. JSR 202 , 2012-02-26 tarihinde Wayback Machine'de arşivlendi – Sınıf dosya biçiminde çeşitli değişiklikleri belirtir
  3. Java Sanal Makine Belirtimi

Dış bağlantılar

  1. Java Sanal Makine Spesifikasyonuna İlişkin Açıklamalar ve Değişiklikler, İkinci Baskı , J2SE 5.0 ve JSR 45'i desteklemek için yapılması gereken değişikliklerin bir listesini içerir.
  2. JSR 45 – Java'ya çevrilen JSP ve SQLJ gibi dillerin kaynak düzeyinde hata ayıklamasını desteklemek için sınıf dosyası biçimindeki değişiklikleri belirtir