JVM nedir? Java Sanal Makinesi ile tanışın

Java Sanal Makinesi, amacı diğer programları yürütmek olan bir programdır. Bu aynı zamanda en büyük kung fu kodlama örneklerimizden biri olan basit bir fikir . JVM, zamanının mevcut durumunu alt üst etti ve bugün programlama yeniliğini desteklemeye devam ediyor.

JVM ne için kullanılır?

JVM'nin iki temel işlevi vardır: Java programlarının herhangi bir cihazda veya işletim sisteminde çalışmasına izin vermek ("Bir kez yaz, her yerde çalıştır" ilkesi olarak bilinir) ve program belleğini yönetmek ve optimize etmek. Java 1995 yılında piyasaya sürüldüğünde, tüm bilgisayar programları belirli bir işletim sistemine yazılıyordu ve program belleği yazılım geliştiricisi tarafından yönetiliyordu. Yani JVM bir vahiydi.

JavaWorld /

JVM için teknik bir tanıma sahip olmak yararlıdır ve ayrıca yazılım geliştiricilerin bu konuda günlük düşündükleri bir yol vardır. Bunları parçalayalım:

  • Teknik tanım : JVM, kodu yürüten ve bu kod için çalışma zamanı ortamı sağlayan bir yazılım programının belirtimidir.
  • Günlük tanım : JVM, Java programlarımızı nasıl çalıştırdığımızdır. JVM'nin ayarlarını yapılandırıyoruz ve ardından yürütme sırasında program kaynaklarını yönetmek için ona güveniyoruz.

Geliştiriciler JVM hakkında konuştuklarında, genellikle bir makinede, özellikle bir Java uygulamasının kaynak kullanımını temsil eden ve kontrol eden bir sunucuda çalışan süreci kastediyoruz. Bunu , bu görevleri gerçekleştiren bir program oluşturmak için gereksinimleri açıklayan JVM spesifikasyonuyla karşılaştırın .

JVM'yi kim geliştirir ve sürdürür?

JVM, hem kurumsal hem de açık kaynaklı çok zeki programcılar tarafından yaygın bir şekilde dağıtılır, yoğun şekilde kullanılır ve sürdürülür. OpenJDK projesi, Sun Microsystems'in açık kaynaklı Java kararının ürünüdür. OpenJDK, Oracle mühendisleri tarafından bugünlerde yapılan ağır yüklerin çoğu ile Oracle'ın Java yönetimini sürdürdü.

JVM'de bellek yönetimi

Çalışan bir JVM ile en yaygın etkileşim, yığın ve yığındaki bellek kullanımını kontrol etmektir. En yaygın ayar, JVM'nin bellek ayarlarını yapmaktır.

Çöp toplama

Java'dan önce, tüm program belleği programcı tarafından yönetiliyordu. Java'da, program belleği JVM tarafından yönetilir. JVM, Java programlarında kullanılmayan belleği sürekli olarak tanımlayan ve ortadan kaldıran çöp toplama adı verilen bir işlem aracılığıyla belleği yönetir . Çöp toplama, çalışan bir JVM içinde gerçekleşir.

İlk günlerde Java, C ++ kadar "metale yakın" olmadığı ve dolayısıyla o kadar hızlı olmadığı için çok eleştirildi. Çöp toplama süreci özellikle tartışmalıydı. O zamandan beri, çöp toplama için çeşitli algoritmalar ve yaklaşımlar önerilmiş ve kullanılmıştır. Tutarlı geliştirme ve optimizasyon ile çöp toplama büyük ölçüde gelişti.

'Metale yakın' ne anlama geliyor?

Programcılar bir programlama dilinin veya platformun "metale yakın" olduğunu söylediğinde, geliştiricinin bir işletim sisteminin belleğini programlama yoluyla (kod yazarak) yönetebileceğini kastediyoruz. Teorik olarak, programcılar ne kadar kullanıldığını ve ne zaman atılacağını belirleyerek programlarımızdan daha fazla performans elde edebilirler. Çoğu durumda, bellek yönetimini JVM gibi son derece rafine bir işleme devretmek, bunu kendiniz yapmaktan daha iyi performans ve daha az hata sağlar.

Üç bölümden oluşan JVM

JVM'nin üç yönü olduğu söylenebilir: şartname, uygulama ve örnek. Bunların her birini ele alalım.

1. JVM spesifikasyonu

İlk olarak, JVM bir yazılım spesifikasyonudur. Biraz dairesel şekilde, JVM Spec olayları bu sistemin ayrıntıları ki değil onun gerçekleştirilmesinde azami yaratıcılık için izin vermek için, spec içinde tanımlanmış:

"Java sanal makinesini doğru bir şekilde uygulamak için, yalnızca classdosya biçimini okuyabilmeniz ve burada belirtilen işlemleri doğru şekilde gerçekleştirebilmeniz gerekir."

JS Bach bir keresinde benzer şekilde müzik yaratmayı tanımladı:

"Tek yapmanız gereken, doğru zamanda doğru tuşa dokunmak."

Yani, JVM'nin yapması gereken tek şey Java programlarını doğru çalıştırmaktır. Kulağa basit geliyor, dışarıdan bile basit görünebilir, ancak özellikle Java dilinin gücü ve esnekliği göz önüne alındığında büyük bir girişimdir.

Sanal makine olarak JVM

JVM, Java sınıfı dosyalarını taşınabilir bir şekilde çalıştıran sanal bir makinedir . Sanal bir makine olmak, JVM'nin, programınızın üzerinde çalıştığı sunucu gibi, temeldeki, gerçek bir makinenin bir soyutlaması olduğu anlamına gelir. Gerçekte hangi işletim sistemi veya donanımın mevcut olduğuna bakılmaksızın, JVM, programların içinde çalışması için öngörülebilir bir ortam oluşturur. Gerçek bir sanal makinenin aksine, JVM sanal bir işletim sistemi oluşturmaz. JVM'yi yönetilen bir çalışma zamanı ortamı veya bir işlem sanal makinesi olarak tanımlamak daha doğru olacaktır .

2. JVM uygulamaları

JVM spesifikasyonunun uygulanması, bir JVM uygulaması olan gerçek bir yazılım programıyla sonuçlanır. Aslında, hem açık kaynaklı hem de tescilli birçok JVM uygulaması vardır. OpenJDK's HotSpot JVM, referans uygulamasıdır ve dünyadaki en kapsamlı şekilde denenmiş ve test edilmiş kod tabanlarından biri olmaya devam etmektedir. HotSpot ayrıca en yaygın kullanılan JVM'dir.

Neredeyse tüm lisanslı JVM'ler, Oracle'ın lisanslı JDK'sı da dahil olmak üzere OpenJDK ve HotSpot JVM'de çatal olarak oluşturulur. OpenJDK'dan lisanslı bir çatal oluşturan geliştiriciler genellikle işletim sistemine özgü performans iyileştirmeleri ekleme arzusuyla motive olurlar. Genellikle, JVM'yi bir Java Runtime Environment (JRE) paketinin bir parçası olarak indirir ve kurarsınız.

3. Bir JVM örneği

JVM spesifikasyonu bir yazılım ürünü olarak uygulanıp yayınlandıktan sonra, onu bir program olarak indirip çalıştırabilirsiniz. İndirilen program, JVM'nin bir örneğidir (veya somutlaştırılmış sürümüdür).

Çoğu zaman, geliştiriciler "JVM" hakkında konuşurken, bir yazılım geliştirme veya üretim ortamında çalışan bir JVM örneğinden bahsediyoruz. "Hey Anand, o sunucudaki JVM ne kadar bellek kullanıyor?" Diyebilirsiniz. veya, "Döngüsel bir çağrı oluşturduğuma inanamıyorum ve bir yığın taşması hatası JVM'mi çöktü. Ne acemi hatası!"

Yazılım özelliği nedir?

Bir yazılım spesifikasyonu (veya spesifikasyonu), bir yazılım sisteminin nasıl çalışması gerektiğini açıklayan, insan tarafından okunabilir bir tasarım belgesidir. Spesifikasyonun amacı, mühendislerin kod yazması için net bir açıklama ve gereksinimler oluşturmaktır.

JVM'de sınıf dosyalarını yükleme ve yürütme

JVM'nin Java uygulamalarını çalıştırmadaki rolünden bahsettik, ancak işlevini nasıl yerine getiriyor? Java uygulamalarını çalıştırmak için JVM, Java sınıfı yükleyiciye ve bir Java yürütme motoruna bağlıdır.

JVM'deki Java sınıfı yükleyici

Java'daki her şey bir sınıftır ve tüm Java uygulamaları sınıflardan oluşturulur. Bir uygulama bir veya binlerce sınıftan oluşabilir. Bir Java uygulamasını çalıştırmak için, JVM, derlenmiş .class dosyalarını, erişilebilecekleri bir sunucu gibi bir bağlama yüklemelidir. Bir JVM, bu işlevi gerçekleştirmek için sınıf yükleyicisine bağlıdır.

Java sınıf yükleyici, JVM'nin sınıfları belleğe yükleyen ve bunları yürütme için uygun hale getiren parçasıdır. Sınıf yükleyiciler, sınıf yüklemesini olabildiğince verimli hale getirmek için geç yükleme ve önbelleğe alma gibi teknikleri kullanır. Bununla birlikte, sınıf yükleme, taşınabilir çalışma zamanı bellek yönetiminin (diyelim ki) epik bir beyin teaserı değildir, bu nedenle teknikler nispeten basittir.

Her Java Sanal Makinesi bir sınıf yükleyici içerir. JVM spesifikasyonu, çalışma zamanında sınıf yükleyiciyi sorgulamak ve değiştirmek için standart yöntemleri açıklar, ancak JVM uygulamaları bu yeteneklerin yerine getirilmesinden sorumludur. Geliştiricinin bakış açısından, temeldeki sınıf yükleyici mekanizmaları genellikle bir kara kutudur.

JVM'deki yürütme motoru

Sınıf yükleyici, sınıfları yükleme işini tamamladığında, JVM her sınıftaki kodu yürütmeye başlar. Yürütme motoru bu işlevi kolları JVM bileşenidir. Yürütme motoru, çalışan JVM için gereklidir. Aslında, tüm pratik amaçlar için JVM örneğidir.

Kodu yürütmek, sistem kaynaklarına erişimi yönetmeyi içerir. JVM yürütme motoru, dosya, ağ ve bellek kaynakları talepleriyle birlikte çalışan program ile bu kaynakları sağlayan işletim sistemi arasında durur.

Yürütme motoru sistem kaynaklarını nasıl yönetir?

Sistem kaynakları iki geniş kategoriye ayrılabilir: bellek ve diğer her şey.

Kullanılmayan belleğin atılmasından JVM'nin sorumlu olduğunu ve bu elden çıkarma işlemini yapan mekanizmanın çöp toplama olduğunu hatırlayın. JVM ayrıca , geliştiricinin kabul ettiği referans yapısını tahsis etmekten ve sürdürmekten sorumludur . Örnek olarak, JVM'nin yürütme motoru, newJava'daki anahtar kelime gibi bir şeyi almaktan ve bunu işletim sistemine özgü bir bellek ayırma isteğine dönüştürmekten sorumludur .

Yürütme motoru, belleğin ötesinde, dosya sistemi erişimi ve ağ G / Ç için kaynakları yönetir. JVM, işletim sistemleri arasında birlikte çalışabildiğinden, bu ortalama bir görev değildir. Her uygulamanın kaynak ihtiyaçlarına ek olarak, yürütme motoru her işletim sistemi ortamına duyarlı olmalıdır. JVM, vahşi talepleri bu şekilde karşılayabilir.

JVM evrimi: Geçmiş, şimdi, gelecek

1995 yılında JVM, o zamandan beri modern yazılım geliştirme için standart ücret haline gelen iki devrim niteliğindeki kavramı tanıttı: "Bir kez yazın, her yerde çalıştırın" ve otomatik bellek yönetimi. Yazılım birlikte çalışabilirliği o zamanlar cesur bir kavramdı, ancak bugün çok az geliştirici bu konuda iki kez düşünürdü. Aynı şekilde, mühendislik atalarımızın program belleğini kendileri yönetmesi gerekirken benim neslim çöp toplama ile büyüdü.

James Gosling ve Brendan Eich'in modern programlamayı icat ettiğini söyleyebiliriz, ancak diğer binlerce kişi sonraki on yıllar boyunca fikirlerini geliştirdi ve geliştirdi. Java Sanal Makinesi, başlangıçta yalnızca Java içindir, bugün ise Scala, Groovy ve Kotlin dahil olmak üzere birçok komut dosyası ve programlama dilini destekleyecek şekilde gelişmiştir. İleriye baktığımızda, JVM'nin geliştirme manzarasının önemli bir parçası olmadığı bir gelecek görmek zor.

JVM hakkında her şey

  • Java'ya meydan okuyanlar: JVM'de iş parçacığı davranışı
  • Java'ya meydan okuyanlar: JVM'de yöntem aşırı yükleme
  • JVM performans optimizasyonu içinde
  • Bayt kodunun temelleri: JVM bayt kodunu nasıl işler?
  • Java istisnaları: JVM istisnaları nasıl işler?
  • Yalın, ortalama Java sanal makinesi ile tanışın

Bu hikaye, "JVM nedir? Java Sanal Makinesi Tanıtımı" ilk olarak JavaWorld tarafından yayınlanmıştır.