Eğitim Portalı/Java/JDK vs JRE vs JVM
Java01-java/85-jdk-jre-jvm

JDK vs JRE vs JVM

Java dünyasına yeni girenlerin en çok karıştırdığı üç kısaltma: JDK, JRE, JVM. Üçü de ilişkilidir ama farklı şeylerdir ve birbirinin içine geçer. Bu ayrımı netleştirmek, "neyi kurmalıyım?", "üretim sunucusunda ne gere…

JDK vs JRE vs JVM

Java dünyasına yeni girenlerin en çok karıştırdığı üç kısaltma: JDK, JRE, JVM. Üçü de ilişkilidir ama farklı şeylerdir ve birbirinin içine geçer. Bu ayrımı netleştirmek, "neyi kurmalıyım?", "üretim sunucusunda ne gerekir?" gibi pratik soruları yanıtlamanı sağlar.

Üç kavram

┌─────────────────────────── JDK (geliştirme) ───────────────────────────┐
│  javac, jar, javadoc, jdb, jshell, jlink, jpackage ...  (araçlar)       │
│  ┌──────────────────────── JRE (çalıştırma) ─────────────────────────┐  │
│  │  Standart kütüphaneler (java.*, javax.*)                          │  │
│  │  ┌──────────────────── JVM (yürütme) ────────────────────────┐    │  │
│  │  │  Class Loader + Bellek Alanları + Execution Engine         │    │  │
│  │  └────────────────────────────────────────────────────────────┘   │  │
│  └─────────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────────┘
       JDK ⊃ JRE ⊃ JVM
  • JVM (Java Virtual Machine): Bytecode'u çalıştıran soyut makine (topic 84). Tek başına dağıtılmaz; her zaman bir JRE/JDK'nın parçasıdır.
  • JRE (Java Runtime Environment): JVM + Java programlarını çalıştırmak için gereken standart kütüphaneler. Yalnızca çalıştırmak için yeterlidir — derleyici yoktur.
  • JDK (Java Development Kit): JRE + geliştirme araçları (javac derleyici, jar, javadoc, jdb, jlink...). Java geliştirmek/derlemek için gereklidir.

Pratikte ne gerekir?

İhtiyaçGereken
Java kodu yazmak/derlemekJDK
Bir Java uygulamasını yalnızca çalıştırmakJRE (veya JDK)
Bytecode'u yürütmek (motor)JVM (zaten JRE/JDK içinde)

Örnek 1 (./Ornek1.java) çalışan ortamı tanır (sürüm, satıcı, java.home). Örnek 2 (./Ornek2.java) farkı kanıtlar: ToolProvider.getSystemJavaCompiler() bir JDK'da non-null (derleyici var), salt JRE'de null olurdu. (Bu portal bir JDK üzerinde çalışır; örnekleri java Dosya.java ile derleyip koşar.)

JDK araçları

JDK'nın getirdiği başlıca komut satırı araçları:

  • javac: Kaynağı (.java) bytecode'a (.class) derler.
  • java: Bytecode'u çalıştırır (ve Java 11+'da tek dosyayı doğrudan derleyip koşar).
  • jar: Sınıfları bir .jar arşivine paketler.
  • javadoc: Kaynak yorumlarından API dokümanı üretir.
  • jshell: Etkileşimli REPL (Java 9+).
  • jlink / jpackage: Özel/küçük çalışma zamanı ve yerel kurulum paketi üretir.

Sürüm ve dağıtım notları

  • Java 11'den beri Oracle ayrı bir "JRE" indirmesi sunmuyor; tek indirme JDK'dır. Üretim için ihtiyacın olan minimal çalışma zamanını jlink ile kendin üretirsin (daha küçük imaj, konteynerler için ideal).
  • Dağıtımlar: OpenJDK temel alınarak birçok sağlayıcı vardır (Eclipse Temurin — bu projenin kullandığı, Amazon Corretto, Azul Zulu, Microsoft Build of OpenJDK...). Hepsi aynı standardı uygular; destek/araç farkları olabilir.

Özet

Üç kavramı netleştirdik: bytecode'u yürüten JVM, çalıştırma için kütüphaneleri ekleyen JRE ve geliştirme araçlarını ekleyen JDK (JDK ⊃ JRE ⊃ JVM); pratikte ne zaman hangisinin gerektiğini, JDK araçlarını ve derleyicinin varlığıyla farkın kanıtını (Örnek 1–2) öğrendik. Sırada, tipler arası dönüşüm: Type Casting.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Çalışan ortamı tanımak — sürüm, satıcı, kurulum yeri.
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    public static void main(String[] args) {
6        System.out.println("Java sürümü (JDK/JRE): " + System.getProperty("java.version"));
7        System.out.println("Çalışma ortamı (JRE) : " + System.getProperty("java.runtime.name"));
8        System.out.println("Sanal makine (JVM)   : " + System.getProperty("java.vm.name"));
9        System.out.println("Satıcı (vendor)      : " + System.getProperty("java.vendor"));
10        System.out.println("Kurulum dizini       : " + System.getProperty("java.home"));
11
12        System.out.println("""
13
14                --- JDK vs JRE vs JVM ---
15                JVM (Java Virtual Machine): bytecode'u ÇALIŞTIRAN soyut makine. (Tek başına dağıtılmaz.)
16                JRE (Java Runtime Environment): JVM + çalıştırmak için gereken standart KÜTÜPHANELER.
17                  -> Sadece çalıştırmak için yeterli (derleyici YOK).
18                JDK (Java Development Kit): JRE + GELİŞTİRME araçları (javac derleyici, jar, javadoc, jdb...).
19                  -> Geliştirmek (derlemek) için gerekli.
20                İç içe geçmedir: JDK ⊃ JRE ⊃ JVM. Bu örnek bir JDK üzerinde çalışıyor (sonraki örnek kanıtlıyor).
21                Not: Java 11'den beri ayrı JRE indirmesi resmi olarak kaldırıldı; jlink ile özel çalışma zamanı üretilir.""");
22    }
23}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: JDK mi JRE mi? — derleyicinin varlığını kontrol ederek kanıtla.
2// Çalıştırma: java Ornek2.java
3import javax.tools.JavaCompiler;
4import javax.tools.ToolProvider;
5
6public class Ornek2 {
7
8    public static void main(String[] args) {
9        // ToolProvider.getSystemJavaCompiler(): JDK'da DERLEYİCİ vardır -> non-null.
10        // Salt JRE'de derleyici YOKTUR -> null döner. Yani bu, JDK/JRE ayrımının somut kanıtıdır.
11        JavaCompiler derleyici = ToolProvider.getSystemJavaCompiler();
12
13        if (derleyici != null) {
14            System.out.println("Sistem derleyicisi MEVCUT -> bir JDK üzerindeyiz.");
15            System.out.println("Derleyici sınıfı: " + derleyici.getClass().getName());
16            System.out.println("Desteklenen kaynak sürümleri: " + derleyici.getSourceVersions().size() + " adet");
17        } else {
18            System.out.println("Sistem derleyicisi YOK -> salt JRE üzerindeyiz (yalnızca çalıştırma).");
19        }
20
21        System.out.println("""
22
23                --- JDK = JRE + geliştirme araçları ---
24                javax.tools.JavaCompiler: JDK'nın getirdiği javac derleyicisine programatik erişim.
25                  Bir JDK üzerindeysen non-null (derleyici var); salt JRE'de null olurdu.
26                JDK araçları: javac (derle), java (çalıştır), jar (paketle), javadoc (dok), jdb (debug),
27                  jlink/jpackage (dağıt), jshell (REPL). Bu portal da örnekleri 'java Dosya.java' ile derleyip çalıştırır.
28                Pratik: geliştirme makinende JDK kurarsın; üretim için jlink ile küçük, özel bir çalışma zamanı üretebilirsin.""");
29    }
30}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.