İçeriğe atla
← Java ve JVM

· 2 dk okuma

JDK, JRE ve JVM Arasındaki Fark

JDK, JRE ve JVM ne işe yarar, birbirini nasıl kapsar? Kısa karşılaştırma tablosuyla.

#java #jdk #jvm

JVM, JRE ve JDK ilişkisi

  • 🛠️ JDK (Java Development Kit), içerisinde derleyici (javac), debugger (jdb), javadoc, jar, javap, JFR/JConsole ve JRE gibi önemli araçları barındırır. Java ile kod geliştirilecek ise JDK’ya ihtiyaç vardır.

  • 📦 JRE (Java Runtime Environment), içerisinde Java çalıştırmak için gerekli minimum bileşenleri barındırır. JVM ve standart sınıf kütüphaneleri JRE’nin parçalarıdır. JDK ile kod geliştirme yapabilirken JRE ile yapılamaz. JRE ile sadece hazır bir jar/war çalıştırabiliriz.

  • ⚙️ JVM (Java Virtual Machine), bytecode’u çalıştıran yapıdır. JVM bir spec’tir; HotSpot, OpenJ9, GraalVM onun implementasyonlarıdır. Bytecode doğrulama, sınıf yükleme, JIT ile derleme, Garbage Collection ve bellek yönetimi (Runtime Data Areas: heap, stack, method area, PC register) gibi görevleri yerine getirir.

  • 🔗 Bytecode kütüphaneleri içermez, yalnızca referans verir. Örneğin List<String> list = new ArrayList<>(); kodu derlendiğinde .class dosyası içerisinde java/util/ArrayList diye sembolik bir isim vardır. ArrayList’in implementasyonu JRE içerisindedir. Onu bulup yükleyen de JVM’deki ClassLoader’dır.

  • 🕘 Ayrı JRE dağıtımı Java 9 ile yapısal olarak sona erdi. Java 11 sonrası Oracle ayrı bir indirme seçeneği olarak JRE’yi kaldırdı. Bu tarihten sonra runtime environment’ın JDK içerisindeki jlink aracılığı ile oluşturulması standart haline geldi. Yani artık JRE indirme diye bir şey yok, JDK indiriliyor.

  • 🌍 JVM’in kendisi platforma özgüdür (Windows JVM ≠ Linux JVM); platform bağımsız olan bytecode’dur.


Karşılaştırma Tablosu

Kriter JDK JRE JVM
Amaç Java uygulaması geliştirmek için kullanılır Java uygulaması çalıştırmak için kullanılır Java bytecode’unu çalıştırır
Platform Bağımlılığı Platforma bağımlı (işletim sistemine özgü) Platforma bağımlı (işletim sistemine özgü) JVM işletim sistemine özgüdür, ancak bytecode platformdan bağımsızdır
İçerdikleri JRE + Geliştirme araçları (javac, debugger vb.) JVM + Kütüphaneler (örn. rt.jar) ClassLoader, JIT Compiler, Garbage Collector
Kullanım Senaryosu Java kodu yazmak ve derlemek Bir sistemde Java uygulaması çalıştırmak Bytecode’u native makine koduna dönüştürmek

Kaynak: GeeksforGeeks

Aynı kategoriden