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.

-
🛠️ 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.classdosyası içerisindejava/util/ArrayListdiye 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
jlinkaracı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
Mutable ve Immutable Nesneler
Immutable nesnelerin özellikleri, ne zaman tercih edilmeli, avantaj ve dezavantajları örneklerle.
Java: Pass by Value ve Defensive Copy
Java gerçekten pass-by-value mı? Referansların kopyalanması ve defensive copy ile nesne bütünlüğünü koruma.
JVM Bellek Alanları
Heap, metaspace, stack, PC register: hangi veri nerede durur, thread-safety ile ilişkisi nedir?