Anasayfa / JAVA / JDK, JRE ve JVM Nedir? Aralarındaki Farklar Nelerdir?

JDK, JRE ve JVM Nedir? Aralarındaki Farklar Nelerdir?

Bir önceki yazımızda Java’nın “Bir kere yaz, her yerde çalıştır” (Write Once, Run Anywhere) felsefesinden ve çalışma mantığından genel hatlarıyla bahsetmiştik. Java programlama dilini öğrenmeye başlayan herkesin ilk adımda karşılaştığı ve genellikle birbiriyle karıştırdığı üç temel kavram vardır: JDK, JRE ve JVM.

Bu üç bileşen, Java ekosisteminin kalbini oluşturur ve Java uygulamalarının geliştirilip sorunsuz bir şekilde farklı platformlarda çalıştırılmasını sağlar. Bu makalemizde ilk defa öğrenecek biri için bu kavramları günlük hayattan örneklerle detaylandırarak ve aralarındaki farkları netleştirerek inceleyeceğiz.


1. JVM (Java Virtual Machine – Java Sanal Makinesi) Nedir?

JVM (Java Virtual Machine), Java’nın kalbidir ve Java programlarını çalıştıran asıl soyut (sanal) makinedir. Java ile yazılan kaynak kodlar derlendiğinde, doğrudan işletim sisteminin anlayacağı bir makine diline dönüşmez; bunun yerine “Bytecode” adı verilen ara bir dile dönüştürülür. JVM’nin temel görevi, bu bayt kodunu satır satır okuyarak o an üzerinde çalıştığı cihazın (Windows, Mac, Linux vb.) anlayabileceği spesifik makine diline çevirmektir.

Java kodunun donanımdan veya işletim sisteminden bağımsız olmasını sağlayan şey JVM’dir. Ancak JVM’nin kendisi platforma bağımlıdır; yani Windows için ayrı, Linux için ayrı bir JVM kurulumu gereklidir.

Günlük Hayattan Örnek: Bir konferansta İngilizce (Bytecode) konuşan bir konuşmacı düşünün. Salondaki dinleyiciler ise İspanyol, Türk ve Japon olsun. JVM, bu konferanstaki anında çeviri yapan tercümandır. Her dinleyiciye (İşletim Sistemi) kendi dilinde çeviri yaparak mesajın herkes tarafından anlaşılmasını sağlar.

JVM’nin Temel Mimarisi Nasıl Çalışır?

JVM, işlevlerini yerine getirmek için üç ana alt sisteme ayrılır:

  1. Sınıf Yükleyici (Class Loader): Yazdığınız Java sınıflarını belleğe yükler. Yükleme (Loading), Bağlama (Linking – bayt kodunu doğrular ve bellek ayırır) ve İlklendirme (Initialization – statik değişkenlere başlangıç değerlerini verir) olmak üzere üç aşamada çalışır.
  2. Çalışma Zamanı Veri Alanları (Runtime Data Areas): JVM’nin çalışırken kullandığı bellek alanlarıdır.
    • Method Area (Metot Alanı): Sınıf yapılarını, metotları ve sabitleri depolar.
    • Heap (Yığın): Java’da oluşturduğunuz tüm nesnelerin (objects) tutulduğu dinamik bellek alanıdır.
    • Stack (Yığıt): Her iş parçacığı (thread) için ayrı oluşturulur; yerel değişkenleri ve metot çağrılarını last-in-first-out (son giren ilk çıkar) mantığıyla saklar.
  3. Çalıştırma Motoru (Execution Engine): Bayt kodunu işler. İçerisinde kodları adım adım okuyan Yorumlayıcı (Interpreter) ve sık kullanılan (hot) metotları doğrudan makine koduna çevirerek performansı artıran JIT (Just-In-Time) Derleyicisi bulunur. Ayrıca bellek sızıntılarını önleyen ve kullanılmayan nesneleri otomatik silen Çöp Toplayıcı (Garbage Collector) da bu motorun bir parçasıdır.

2. JRE (Java Runtime Environment – Java Çalışma Zamanı Ortamı) Nedir?

JRE (Java Runtime Environment), Java programlarının bilgisayarınızda çalışabilmesi için gerekli olan ortamı sağlayan yazılım paketidir. Sadece geliştirilmiş bir Java uygulamasını kullanmak veya çalıştırmak isteyen son kullanıcılar için tasarlanmıştır.

JRE, kendi içerisinde JVM’yi ve Java programlarının çalışması için gereken çekirdek kütüphaneleri (Class Libraries) barındırır. Ancak, kod yazmak için gerekli olan derleyici (compiler) veya hata ayıklayıcı (debugger) gibi geliştirici araçlarını içermez.

Günlük Hayattan Örnek: Bir oyun oynamak istediğinizi düşünün. JRE, oyunu açıp oynamanızı sağlayan Oyun Konsoludur (PlayStation/Xbox). Konsol sayesinde oyunu mükemmel bir şekilde oynarsınız (çalıştırırsınız) ama konsolun içinde yeni bir oyun yazmak (programlamak) için gereken araçlar bulunmaz.


3. JDK (Java Development Kit – Java Geliştirme Kiti) Nedir?

JDK (Java Development Kit), Java tabanlı yazılımlar, web siteleri ve uygulamalar “geliştirmek” (kodlamak) isteyen yazılımcıların bilgisayarlarına kurması gereken en kapsamlı yazılım geliştirme kitidir.

JDK, bir yazılımı hem kodlamak hem de test etmek için gereken her şeyi kapsar. Yapısal olarak JDK, JRE’yi (dolayısıyla JVM’yi) kendi içinde barındırır ve ek olarak yazılımcılara özel araçlar sunar.

İçerdiği Bazı Temel Geliştirici Araçları:

  • javac (Java Compiler): Yazdığınız insanların okuyabildiği Java kodunu, JVM’nin okuyabileceği Bytecode’a (.class uzantılı dosyalara) dönüştürür (derler).
  • jdb (Java Debugger): Kodunuzdaki hataları bulmanıza ve ayıklamanıza yardımcı olur.
  • jar (Java Archiver): Birden fazla Java sınıf dosyasını tek bir paket haline getirerek dağıtıma hazır hale getirir.
  • jlink: Modern Java’da mikroservisler oluşturmak için projenize özel, sadece ihtiyaç duyulan modülleri içeren küçültülmüş bir JRE oluşturmanızı sağlar.

Günlük Hayattan Örnek: Eğer JRE bir oyun konsolu ise, JDK tam donanımlı bir Oyun Geliştirme Stüdyosu’dur. İçinde hem kendi yaptığınız oyunu test edip oynayabileceğiniz bir konsol (JRE) vardır, hem de oyunu tasarlayıp kodlayacağınız bilgisayarlar, grafik programları ve derleyiciler (Dev Tools) bulunur.


4. JDK, JRE ve JVM Arasındaki Temel Farklar Nelerdir?

Bu üç kavramın aralarındaki ilişkiyi ve farkları matematiksel bir formülle ve tabloyla özetlemek, konunun tam olarak zihne oturmasını sağlayacaktır:

  • JVM = Sadece çalışma zamanı ortamı (Çekirdek Motor).
  • JRE = JVM + Core Class Libraries (Çekirdek Kütüphaneler).
  • JDK = JRE + Development Tools (Geliştirici Araçları).
ÖzellikJDK (Java Development Kit)JRE (Java Runtime Environment)JVM (Java Virtual Machine)
Temel İşlevJava uygulamaları geliştirmek, derlemek ve çalıştırmak içindir.Yalnızca derlenmiş Java uygulamalarını çalıştırmak içindir.Bytecode’u makine koduna çevirerek kodun işletilmesini (execute) sağlar.
Hedef KitleYazılım Geliştiricileri (Developer).Son Kullanıcılar ve Sunucular.JDK ve JRE’nin içindeki çalışan sistem.
İçerikJRE, javac (derleyici), jdb (hata ayıklayıcı), jlink gibi araçlar.JVM, Java paketleri (java.util, java.lang vb.) ve çalışma zamanı kütüphaneleri.Sınıf Yükleyici (Class Loader), Bellek Alanları, Çöp Toplayıcı, JIT Derleyici.
Platform Bağımlılığıİşletim sistemine (Windows, Mac, Linux) özel kurulmalıdır.İşletim sistemine özel kurulmalıdır.İşletim sistemine özeldir ancak kodun platform bağımsız çalışmasını sağlar.

5. Modern Yazılım Geliştirmede Stratejik Bir İpucu (Kapsamlı SEO Bilgisi)

Java dünyasında, özellikle günümüzün modern Bulut (Cloud) ve Mikroservis mimarilerinde JDK ve JRE ayrımı şirketlerin maliyetlerini ve güvenliklerini doğrudan etkileyen çok stratejik bir konudur.

Bir geliştirici kodunu yazarken bilgisayarında mutlaka JDK kullanır. Ancak, bu kod internette yayına alınırken (Production / Docker ortamlarında), konteynerlerin içine hiçbir zaman devasa boyutlardaki JDK kurulmamalıdır. JDK’nın içindeki derleyici araçlar canlı sunucularda sadece boyutu şişirmekle kalmaz, olası siber saldırılarda (hackerların sunucuda kod derlemesini sağlayabileceği için) ciddi güvenlik riskleri oluşturur.

Modern Java’da (Java 9 ve sonrası), JDK’nın içerisinde bulunan jlink aracı sayesinde uygulamanızın ihtiyaç duyduğu özel ve kırpılmış bir JRE oluşturabilirsiniz. Bu işlem, bulut sunuculardaki Java uygulaması boyutunu (örneğin 200 MB’lardan 30-50 MB’lara) ciddi oranda küçültür ve kaynak tüketiminde (Cloud maliyetlerinde) büyük tasarruf sağlar. Kural basittir: Uygulamayı JDK ile geliştir, minimalize edilmiş bir JRE ile yayına al!.

Özet

Yeni başlayan bir yazılımcı olarak bilmeniz gereken kural şudur: Java diliyle web siteniz veya projeniz için kod yazmaya başlayacaksanız bilgisayarınıza JDK indirmelisiniz. Siz kodlarınızı yazar ve derlersiniz; arkadaşınız ise yazdığınız bu uygulamayı kendi bilgisayarında açmak istediğinde sadece JRE kurarak uygulamanızın keyfini çıkarabilir. JVM ise tüm bu sürecin perde arkasında gizli bir kahraman olarak çalışan ve kodlarınızın donanımla haberleşmesini sağlayan motordur.

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

DERSLER