JVM
Java Virtual Machine
- Türkçe karşılığı
- Java sanal makinesi
- Okunuşu
- cey vi em
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
JVM, Java bytecode'unu çalıştırır; böylece derlenmiş bir program her işletim sisteminde çalışır. Kotlin, Scala ve Clojure da bu bytecode'a derlenir.
JVM nedir?
Java kaynak kodu belirli bir işlemci için derlenmez. javac derleyicisi onu .class dosyalarında saklanan ve JAR dosyalarında paketlenen bytecode'a çevirir; JVM de bu bytecode'u kurulu olduğu her makinede çalıştırır. Java'nın eski sloganı, bir kez yaz, her yerde çalıştır, bu fikre dayanır: program Windows'ta, macOS'ta ve Linux'ta aynıdır, yalnızca JVM farklıdır.
JVM bytecode okumaktan çok daha fazlasını yapar. Sınıfları gerektikçe yükler, bytecode'u güvenlik için denetler, belleği bir garbage collector ile yönetir ve en sık çalışan kodu just-in-time (JIT) derleyiciyle doğrudan makine koduna çevirir; uzun süre çalışan Java sunucularının ısındıktan sonra hızlanmasının nedeni budur. En yaygın gerçekleştirim olan HotSpot, çoğu Java dağıtımının arkasındaki açık kaynak proje OpenJDK ile birlikte gelir.
JVM, Java'nın kendisini değil bytecode'u çalıştırdığı için başka diller de onu hedef alır: Kotlin, Scala, Clojure ve Groovy aynı bytecode'a derlenir ve herhangi bir Java kütüphanesini kullanabilir. Geliştirme yapmak için derleyiciyi ve JVM'i içeren bir JDK (Java Development Kit) kurarsınız. JVM'in spesifikasyonu herkese açıktır; bu yüzden birçok sağlayıcı kendi dağıtımını sunar.
Önemli noktalar
- JVM, Java bytecode'unu çalıştırır; derlenmiş bir program her işletim sisteminde çalışır.
- Belleği bir garbage collector ile yönetir ve sık çalışan kodu bir JIT derleyiciyle hızlandırır.
- Kotlin, Scala, Clojure ve Groovy de JVM bytecode'una derlenir.
- JDK, derleyiciyi ve JVM'i içerir; olağan JVM, OpenJDK'nın HotSpot'udur.
Örnek
# Hello.java: public class Hello { public static void main(String[] a) { System.out.println("Hi"); } }
javac Hello.java # compile to bytecode: Hello.class
java Hello # the JVM loads Hello.class and runs it
# Hi
javap -c Hello # print the bytecode instructions the JVM executesSık sorulan sorular
JDK, JRE ve JVM arasındaki fark nedir?
JVM, bytecode'u çalıştıran motordur. JRE, JVM'e standart kütüphaneyi eklerdi; programları çalıştırmaya yetiyordu. JDK ise bunlara javac derleyicisi gibi geliştirme araçlarını ekler. Java 11'den beri Oracle ayrı bir JRE sunmuyor; bir JDK kurarsınız.
JVM, VirtualBox ile aynı türden bir sanal makine mi?
Hayır. Sistem sanal makinesi, bir işletim sistemini çalıştırabilmek için koca bir bilgisayarı taklit eder. JVM ise bir süreç sanal makinesidir: tek bir uygulamanın bytecode'unu çalıştıran sıradan bir programdır.
İlgili sayfalar
- JavaProgramlama Dilleri, s. 15Java, Java Sanal Makinesi için bayt koda derlenen, statik tipli ve nesne yönelimli bir programlama dilidir; programlar birçok platformda çalışabilir.
- KotlinProgramlama Dilleri, s. 18Kotlin, JVM üzerinde çalışan, Java ile sorunsuz uyum sağlayan, özlü ve statik tipli bir dildir; Android ve sunucu tarafı geliştirmede yaygın kullanılır.
- ScalaProgramlama Dilleri, s. 30Scala, nesne yönelimli ve fonksiyonel programlamayı birleştiren, statik tipli bir JVM dilidir; veri mühendisliğinde ve arka uç sistemlerinde yaygın kullanılır.
- ClojureProgramlama Dilleri, s. 6Clojure, JVM'de çalışan modern ve dinamik bir Lisp lehçesidir; değiştirilemez veriyi, fonksiyonel programlamayı ve REPL tabanlı geliştirmeyi öne çıkarır.
- JIT derlemeProgramlamanın Temelleri, s. 30JIT derleme, programın en sık çalışan kısımlarını çalışma anında makine koduna çevirerek yorumlayıcının hızlı açılışını derlenmiş kodun hızıyla birleştirir.
- Çöp toplamaProgramlamanın Temelleri, s. 9Çöp toplama, dil çalışma zamanının programın artık kullanamadığı verileri bulup bu belleği yeniden kullanıma açtığı otomatik bellek yönetimidir.
- Sanal MakineDevOps ve Bulut, s. 45Sanal makine, paylaşılan fiziksel donanımda kendi işletim sistemini çalıştıran, aynı ana makinedeki diğerlerinden yalıtılmış yazılım tabanlı bilgisayardır.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin