# JVM (Java Virtual Machine)

Adres: https://softwaredictionary.org/tr/terimler/jvm
Kategori: Programlama Dilleri
Son güncelleme: 2026-10-05
Türkçe karşılığı: Java sanal makinesi
Okunuşu: cey vi em

Kısaca: JVM, Java bytecode'unu çalıştırır; böylece derlenmiş bir program her işletim sisteminde çalışır. Kotlin, Scala ve Clojure da bu bytecode'a derlenir.

## JVM nedir?

Java kaynak kodu belirli bir işlemci için derlenmez. `javac` derleyicisi onu `.class` dosyalarında saklanan ve JAR dosyalarında paketlenen bytecode'a çevirir; JVM de bu bytecode'u kurulu olduğu her makinede çalıştırır. Java'nın eski sloganı, bir kez yaz, her yerde çalıştır, bu fikre dayanır: program Windows'ta, macOS'ta ve Linux'ta aynıdır, yalnızca JVM farklıdır.

JVM bytecode okumaktan çok daha fazlasını yapar. Sınıfları gerektikçe yükler, bytecode'u güvenlik için denetler, belleği bir garbage collector ile yönetir ve en sık çalışan kodu just-in-time (JIT) derleyiciyle doğrudan makine koduna çevirir; uzun süre çalışan Java sunucularının ısındıktan sonra hızlanmasının nedeni budur. En yaygın gerçekleştirim olan HotSpot, çoğu Java dağıtımının arkasındaki açık kaynak proje OpenJDK ile birlikte gelir.

JVM, Java'nın kendisini değil bytecode'u çalıştırdığı için başka diller de onu hedef alır: Kotlin, Scala, Clojure ve Groovy aynı bytecode'a derlenir ve herhangi bir Java kütüphanesini kullanabilir. Geliştirme yapmak için derleyiciyi ve JVM'i içeren bir JDK (Java Development Kit) kurarsınız. JVM'in spesifikasyonu herkese açıktır; bu yüzden birçok sağlayıcı kendi dağıtımını sunar.

## Önemli noktalar

- JVM, Java bytecode'unu çalıştırır; derlenmiş bir program her işletim sisteminde çalışır.
- Belleği bir garbage collector ile yönetir ve sık çalışan kodu bir JIT derleyiciyle hızlandırır.
- Kotlin, Scala, Clojure ve Groovy de JVM bytecode'una derlenir.
- JDK, derleyiciyi ve JVM'i içerir; olağan JVM, OpenJDK'nın HotSpot'udur.

## Örnek: Kaynak koddan bytecode'a, oradan JVM'e

```bash
# Hello.java: public class Hello { public static void main(String[] a) { System.out.println("Hi"); } }
javac Hello.java   # compile to bytecode: Hello.class
java Hello         # the JVM loads Hello.class and runs it
# Hi
javap -c Hello     # print the bytecode instructions the JVM executes
```

## Sık sorulan sorular

**JDK, JRE ve JVM arasındaki fark nedir?**

JVM, bytecode'u çalıştıran motordur. JRE, JVM'e standart kütüphaneyi eklerdi; programları çalıştırmaya yetiyordu. JDK ise bunlara `javac` derleyicisi gibi geliştirme araçlarını ekler. Java 11'den beri Oracle ayrı bir JRE sunmuyor; bir JDK kurarsınız.

**JVM, VirtualBox ile aynı türden bir sanal makine mi?**

Hayır. Sistem sanal makinesi, bir işletim sistemini çalıştırabilmek için koca bir bilgisayarı taklit eder. JVM ise bir süreç sanal makinesidir: tek bir uygulamanın bytecode'unu çalıştıran sıradan bir programdır.

## Kaynaklar

- [The Java Virtual Machine Specification (Java SE 21)](https://docs.oracle.com/javase/specs/jvms/se21/html/index.html)
- [Oracle: Java Virtual Machine Technology Overview](https://docs.oracle.com/en/java/javase/21/vm/java-virtual-machine-technology-overview.html)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
