Logo
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

JDK, JRE ve JVM Arasındaki Fark Nedir?

Yazar: Berk Keskin 15.08.2026 ~10 dk okuma 23 Okunma
jdk-jre-jvm-farki-nedir

JDK, JRE ve JVM, Java diliyle çalışmaya başlayan hemen herkesin ilk karıştırdığı üç kavramdır ve aralarındaki fark aslında oldukça nettir: JVM Java programlarını çalıştıran sanal makinedir, JRE bu makineyi ve gerekli kütüphaneleri barındıran çalışma zamanı ortamıdır, JDK ise hem çalıştırmayı hem de kod yazıp derlemeyi mümkün kılan tam geliştirme paketidir. Basitçe söylemek gerekirse JDK, JRE'yi; JRE de JVM'i içine alan bir kapsama ilişkisi kurar. Bu yazıda her bir bileşenin ne işe yaradığını, birbirinden nasıl ayrıldığını ve bir Java programının bilgisayarınızda hangi adımlardan geçerek çalıştığını sade örneklerle ele alacağız.

JVM Nedir? Java'nın Sanal Makinesi Nasıl Çalışır?

JVM (Java Virtual Machine), yazdığınız Java kodunun derlenmesiyle ortaya çıkan bytecode adı verilen ara formatı okuyup işletim sistemine ve donanıma uygun makine talimatlarına dönüştüren soyut bir çalıştırma makinesidir. Burada kritik nokta şudur: siz .java dosyanızı doğrudan işletim sistemine değil, önce bytecode'a çevirirsiniz; JVM de bu bytecode'u ya satır satır yorumlayarak ya da sık çalışan bölümleri JIT (Just-In-Time) derleyicisiyle anlık olarak gerçek makine koduna çevirerek çalıştırır. Bu iki yöntemin birlikte kullanılması, hem esnekliği hem de kabul edilebilir bir performansı bir arada sunar.

Bunu anlamak için evrensel bir çevirmen benzetmesi işe yarar: siz konuşmanızı (Java kodunuzu) ortak bir dile (bytecode) çeviriyorsunuz, çevirmen (JVM) de bu ortak dili dinleyip karşınızdaki kişinin (işletim sisteminin) anlayacağı dile aktarıyor. Böylece aynı bytecode dosyası, altında Windows, Linux ya da başka bir işletim sistemi çalışsın, kendi platformuna uygun JVM tarafından doğru şekilde yorumlanabilir. Java dünyasında sık duyulan "write once, run anywhere" yani "bir kere yaz, her yerde çalıştır" felsefesinin teknik temeli tam olarak budur: platform bağımsızlığı, kaynak kodun kendisinden değil, bytecode ile JVM arasındaki bu aracı katmandan gelir.

Burada altını çizmekte fayda var: JVM tek başına bir geliştirme aracı değildir. İçinde kod yazacağınız bir editör, kodunuzu bytecode'a çevirecek bir derleyici ya da hata ayıklama aracı barındırmaz; yalnızca hazır bytecode'u alıp çalıştırmakla görevli bir çalıştırma bileşenidir. Bu nedenle JVM'i tek başına düşünmek yerine, onu bir üst çatı içinde, yani JRE'nin bir parçası olarak ele almak daha doğru bir bakış açısı sunar.

JRE Nedir? Çalışma Zamanı Ortamı Ne İşe Yarar?

JRE Nedir? Çalışma Zamanı Ortamı Ne İşe Yarar?

JRE (Java Runtime Environment), JVM'in kendisiyle birlikte Java programlarının çalışması için gereken standart sınıf kütüphanelerini (class library) bir araya getiren pakettir. Yani bir Java uygulaması çalışırken yalnızca bytecode'u yorumlayan motora değil, aynı zamanda temel veri yapıları, dosya işlemleri, ağ iletişimi gibi hazır sınıflara da ihtiyaç duyar; JRE tam olarak bu ikisini bir arada sunar. Bir program çalıştığında arkada olan biten, JVM'in devreye girip JRE içindeki kütüphanelerden gerekli sınıfları yüklemesi ve bytecode'u bu kütüphanelerle birlikte yürütmesidir.

Sadece yazılmış ve derlenmiş bir Java uygulamasını çalıştırmak isteyen bir kullanıcı için JRE tamamen yeterlidir. Örneğin bilgisayarına bir masaüstü Java uygulaması kuran ve o uygulamayı kullanmaktan başka bir amacı olmayan biri, kodla hiç uğraşmadan sadece JRE kurulu bir sistemde bu programı sorunsuz çalıştırabilir. Bu, JRE'yi son kullanıcı tarafında sıkça karşılaşılan, "çalıştırmaya yönelik" bir bileşen hâline getirir.

Ancak burada net bir sınır vardır: JRE ile geliştirme yapılamaz. İçinde javac gibi bir derleyici, hata ayıklayıcı (debugger) ya da başka bir geliştirme aracı bulunmaz; dolayısıyla JRE kurulu bir bilgisayarda yeni bir .java dosyası yazıp derlemeye çalıştığınızda ihtiyacınız olan araçları bulamazsınız. JRE'nin görevi, zaten hazır hâle getirilmiş bytecode'u çalıştırmakla sınırlıdır; kaynak kodu üretme ve derleme işi tamamen farklı bir katmana, yani JDK'ye aittir.

JDK Nedir? Geliştiricinin İhtiyaç Duyduğu Tam Paket

JDK (Java Development Kit), JRE'nin tüm bileşenlerine ek olarak javac derleyicisini, hata ayıklama araçlarını (debugger) ve diğer geliştirme yardımcılarını bir arada sunan tam paketin adıdır. Başka bir deyişle JDK, "JRE + geliştirme araçları" formülüyle özetlenebilir: içinde hem programı çalıştıracak JVM ve kütüphaneler hem de kaynak kodu bytecode'a çevirecek javac komutu, hem de hataları izlemek için kullanılan araçlar bulunur. Bir .java dosyasını derlemek istediğinizde devreye giren komut tam olarak javac'tır; bu komut olmadan kaynak kodunuzu çalıştırılabilir bytecode hâline getirmeniz mümkün değildir.

Bu yüzden bir geliştiricinin bilgisayarına yalnızca JRE değil, mutlaka JDK kurması gerekir. Kod yazan, derleyen, test eden ve hata ayıklayan biri için JRE tek başına yetersiz kalır; çünkü derleyici ve geliştirme araçları olmadan yazdığınız kaynak kod hiçbir zaman çalıştırılabilir bir bytecode dosyasına dönüşemez. JDK kurulumunu tamamlayan bir geliştirici, hem kod yazma hem derleme hem de çalıştırma adımlarının tamamını tek bir paket üzerinden yönetebilir hâle gelir.

Kapsama ilişkisi açısından bakıldığında JDK, JRE'yi içine alan bir üst kümedir: her JDK kurulumu beraberinde çalışan bir JRE getirir, ama her JRE kurulumu bir JDK anlamına gelmez. Bu nedenle "hangisini kurmalıyım" sorusunun cevabı sizin rolünüze göre değişir; sadece bir uygulamayı çalıştıracaksanız JRE yeterlidir, ama kod yazıp derleyecekseniz JDK zorunludur. Bu ayrımı ilk elden, uygulamalı örneklerle pekiştirmek isteyenler için birebir Java özel dersi kapsamında JDK kurulumundan javac komutunun kullanımına kadar tüm süreç adım adım anlatılır; kavram karmaşasının pratikte nasıl netleştiği gözlemlenebilir.

JDK, JRE ve JVM Arasındaki Kapsama İlişkisi

Buraya kadar üç kavramı ayrı ayrı tanımladık, ancak bunları gerçekten anlamlı kılan şey aralarındaki kapsama ilişkisidir. JDK, JRE'yi içinde barındırır; JRE de JVM'i içinde barındırır. Yani bir küme mantığıyla düşünürsek: JDK ⊃ JRE ⊃ JVM. Bu, en büyük paketin (JDK) en küçük parçayı (JVM) da otomatik olarak içerdiği, ama tersinin doğru olmadığı anlamına gelir — sadece JVM'e sahip olmak size ne derleme ne de çalışma zamanı desteği sağlar.

Bileşen İçerdikleri Kimin İçin Gerekli Ne Zaman Kullanılır
JDK (Java Development Kit) JRE + derleyici (javac) + geliştirme araçları Yazılım geliştiriciler Kod yazarken ve derlerken
JRE (Java Runtime Environment) JVM + standart kütüphaneler Java programını çalıştıracak herkes Derlenmiş programı çalıştırırken
JVM (Java Virtual Machine) Bytecode'u yorumlayan/çalıştıran motor Her Java programının temeli Programın fiilen işletildiği her an

Kısacası, bir geliştiricinin masasında JDK bulunur çünkü hem kod yazıp derlemesi hem de sonucu çalıştırıp test etmesi gerekir; oysa yalnızca hazır bir Java uygulamasını çalıştıracak bir ortamda JRE yeterli olabilir ve her iki durumda da işin temelinde sessizce çalışan motor yine JVM'dir.

Bir Java Programı Nasıl Yazılır, Derlenir ve Çalıştırılır?

Bir Java Programı Nasıl Yazılır, Derlenir ve Çalıştırılır?

Java'da bir programın ekrana bir şey yazdırmasına kadar geçen süreç, aslında JDK, JRE ve JVM'in nasıl birlikte çalıştığını gözler önüne seren en somut örnektir. Bu süreci adım adım izlemek, kavramları ezberlemek yerine gerçekten kavramanın en pratik yoludur. canlı yazılım eğitimlerimiz kapsamında öğrenciler bu adımları ilk derslerden itibaren kendi elleriyle tekrar tekrar uygulayarak içselleştirir.

  1. Geliştirici, herhangi bir metin düzenleyici veya IDE kullanarak .java uzantılı bir kaynak kod dosyası yazar.
  2. JDK içindeki javac derleyicisi bu dosyayı okuyup insan tarafından yazılan kodu bytecode adı verilen ara bir dile çevirir.
  3. Derleme başarılı olursa, aynı isimde ama .class uzantılı bir bytecode dosyası oluşturulur.
  4. Bu .class dosyası, java komutuyla çalıştırıldığında JVM devreye girer, bytecode'u yorumlar ve işletim sistemine uygun makine talimatlarına dönüştürerek programı fiilen çalıştırır.

Bu döngüyü somutlaştırmak için klasik bir örneğe bakalım:

public class Merhaba {
    public static void main(String[] args) {
        System.out.println("Merhaba, Java!");
    }
}

Bu kodu Merhaba.java olarak kaydettikten sonra terminalde önce javac Merhaba.java komutu çalıştırılır. Bu komut, JDK'nin derleyicisini devreye sokar ve aynı klasörde Merhaba.class adlı bytecode dosyasını üretir; bu aşamada henüz hiçbir çıktı ekrana yazdırılmaz, sadece kod makinenin anlayacağı ara forma çevrilmiş olur. Ardından java Merhaba komutu yazıldığında ise JVM devreye girer, .class dosyasını okur, içindeki main metodunu bulur ve satır satır işleterek "Merhaba, Java!" çıktısını ekrana bastırır. Dikkat edilirse ilk komutta dosya uzantısı belirtilirken, ikinci komutta yalnızca sınıf adı yazılır — çünkü java komutu artık kaynak kodla değil, JVM'in anlayacağı bytecode ile muhatap olur.

Geliştiriciler Günlük Hayatta JDK ve JRE ile Nasıl Karşılaşır?

Bir IDE kurulumu yaparken karşınıza genellikle bir Java sürümü seçme ekranı çıkar ve sistem sizden JDK yolu göstermenizi ister; bunun nedeni IDE'nin arka planda hem kodunuzu derleyebilmesi hem de çalıştırabilmesi, dolayısıyla yalnızca JRE'nin sunduğu çalışma zamanının bu iş için yetersiz kalmasıdır. IDE, otomatik tamamlama, hata vurgulama ve derleme gibi işlemleri gerçekleştirebilmek için javac gibi geliştirme araçlarına doğrudan ihtiyaç duyar.

Buna karşılık, kavramsal olarak düşünüldüğünde, bir sunucu ortamında yalnızca önceden derlenmiş bir Java uygulamasını çalıştırmak yeterliyse, teoride sadece JRE bulundurmak bu ihtiyacı karşılayabilir; çünkü orada kod yazılmaz veya derlenmez, sadece hazır bytecode işletilir. Bu ayrım, öğrencilerin "neden bazen JDK bazen JRE isteniyor" sorusuna verilecek en net cevaptır.

Yeni başlayan öğrenciler kendi bilgisayarlarında kurulum yaparken sıkça birkaç tipik hatayla karşılaşır. En yaygınlarından biri, JAVA_HOME adlı ortam değişkeninin doğru tanımlanmamış olmasıdır; bu değişken, işletim sistemine Java'nın nerede kurulu olduğunu söyler ve yanlış veya boş bırakıldığında terminal "java komutu tanınmıyor" gibi hatalar verebilir. Bir diğer sık karşılaşılan durum ise sistemde birden fazla Java kurulumunun bulunması ve komut satırının hangisini kullanacağını karıştırmasıdır. Bu tür kurulum sorunları ilk bakışta ürkütücü görünse de aslında JDK, JRE ve JVM ilişkisini pratikte anlamanın en iyi fırsatlarından biridir. Kendi bilgi düzeyinizi görmek isterseniz ücretsiz yazılım bilgisi testi ile nerede durduğunuzu ölçebilir, eksik gördüğünüz noktaları netleştirebilirsiniz.

Java Öğrenme Sürecinde Bu Kavramların Yeri

JDK, JRE ve JVM üçlüsünü kavramak, Java öğrenimindeki ilk teknik dönüm noktalarından biridir. Bu üç kavram netleşmeden nesne yönelimli programlamaya (OOP) geçmek, üzerine bir bina inşa etmeden temel atmaya benzer. Sınıf, nesne, kalıtım ve arayüz gibi OOP kavramlarını öğrenirken yazdığınız her kod parçası, arka planda yine javac ile derlenip JVM üzerinde çalışır; dolayısıyla bu mekanizmayı anlamak, ileride karşılaşacağınız hataları ve derleme süreçlerini yorumlamayı kolaylaştırır.

Kariyerinizde ilerledikçe Maven veya Gradle gibi bağımlılık ve derleme yönetim araçlarıyla, Spring gibi kurumsal geliştirme çerçeveleriyle karşılaşacaksınız. Bu araçların hepsi arka planda JDK'nın sunduğu derleyici ve araç setini kullanır, ürettikleri çıktı ise yine JRE içindeki JVM tarafından çalıştırılır. Yani bu üçlü, üzerine kurulan her katmanın görünmeyen ama vazgeçilmez zeminidir. Bu zemini iyi anlayan bir geliştirici, bir framework hata verdiğinde sorunun derleme aşamasında mı yoksa çalışma zamanında mı olduğunu çok daha hızlı ayırt edebilir.

Kavram bu noktada netleştikten sonra, öğrenmeyi teoriden pratiğe taşımak önemlidir. Rehberli bir ortamda ilerlemek isteyenler için canlı sınıflı Java eğitimleri, sınıf içi uygulamalarla bu temel kavramları gerçek kod üzerinde pekiştirme imkânı sunar. Bireysel hızda, kendi soru işaretlerine odaklanarak ilerlemek isteyenler ise 1-1 Java özel ders desteğiyle JDK kurulumundan ilk programın derlenip çalıştırılmasına kadar olan süreci birebir bir eğitmen eşliğinde deneyimleyebilir.

Java'yı sağlam temellerle öğrenmek, yalnızca bir sınav veya proje için değil, uzun vadeli bir yazılım kariyeri için de değerlidir. Kurumsal yazılım dünyasının halen geniş biçimde tercih ettiği bir dil olan Java'da JDK, JRE ve JVM ayrımını iyi bilen bir geliştirici adayı, mülakatlarda ve gerçek iş ortamlarında karşılaşacağı sorulara çok daha hazırlıklı yaklaşır. Küçük görünen bu kavramsal fark, aslında yazılım geliştirme disiplinine bakışınızı şekillendiren büyük bir adımdır.

Sık Sorulan Sorular

JDK olmadan bir Java programı çalıştırılabilir mi?

Evet, zaten derlenmiş yani bytecode'a çevrilmiş bir Java programını çalıştırmak için yalnızca JRE yeterlidir. JDK, kaynak kodu derlemek için gereklidir; ancak hazır bir .class dosyasını çalıştırmak JVM ve destekleyici kütüphaneler yani JRE üzerinden gerçekleşir.

Sadece JRE kurulu bir bilgisayarda javac komutu çalışır mı?

Hayır. javac derleyicisi JDK'nın bir parçasıdır ve JRE içinde bulunmaz. Sadece JRE kurulu bir sistemde kaynak kodu (.java dosyasını) derlemeye çalıştığınızda komut bulunamaz hatası alırsınız; bu ortamda yalnızca zaten derlenmiş programları çalıştırabilirsiniz.

JVM her işletim sisteminde aynı şekilde mi çalışır?

JVM'in temel görevi ve çalışma mantığı her platformda aynıdır: bytecode'u yorumlayıp işletim sistemine özgü makine talimatlarına çevirir. Ancak JVM'in kendisi işletim sistemine özel olarak derlenmiş bir yazılımdır; bu sayede aynı bytecode dosyası, üzerinde uygun JVM bulunan farklı işletim sistemlerinde çalışabilir.

Bytecode nedir, makine koduyla farkı nedir?

Bytecode, Java kaynak kodunun derleyici tarafından üretilen, doğrudan işlemci tarafından değil JVM tarafından anlaşılan ara bir kod biçimidir. Makine kodu ise doğrudan işlemcinin çalıştırabileceği, işletim sistemine ve donanıma özgü ikili talimatlardır. Bytecode, JVM sayesinde farklı platformlarda taşınabilirlik sağlarken, makine kodu belirli bir donanıma bağımlıdır.

Yeni başlayan biri sadece JDK kurarak hem geliştirme hem çalıştırma yapabilir mi?

Evet. JDK, içinde JRE'yi ve dolayısıyla JVM'i barındıran kapsamlı bir pakettir. Bu yüzden bilgisayarınıza JDK kurduğunuzda hem kod yazıp derleme yapabilir hem de bu kodu doğrudan aynı ortamda çalıştırabilirsiniz; ayrıca ayrı bir JRE kurulumuna ihtiyaç duymazsınız.

JDK kurarken hangi araçlar otomatik olarak bilgisayarıma yüklenir?

JDK kurulumuyla birlikte derleyici (javac), çalıştırıcı (java), hata ayıklama ve arşivleme gibi temel geliştirici araçları ve bunların çalışması için gerekli olan JRE bileşenleri (dolayısıyla JVM ve standart kütüphaneler) tek seferde sisteminize kurulur.

JDK, JRE ve JVM arasındaki bu ayrımı netleştirmek, Java yolculuğunuzda atacağınız en sağlam ilk adımlardan biridir. Bu temel kavramları pratiğe dökmek ve bir sonraki aşamaya geçmek isterseniz, Java yazılım kursu içeriğine göz atarak size uygun öğrenme yolunu keşfedebilirsiniz.

Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 300'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara