JDK, JRE en JVM uitgelegd: Belangrijkste verschillen en hoe ze samenwerken
Wat is de Java Development Kit (JDK)?
De JDK is een uitgebreide toolkit die ontwikkelaars in staat stelt om Java-applicaties te schrijven, compileren, debuggen en uit te voeren. Het wordt geleverd met de Java-compiler (javac), core-klassenbibliotheken en een suite ontwikkeltools zoals de debugger en JavaDoc. De kit is beschikbaar voor Windows, macOS, Linux en Solaris, en meerdere versies kunnen op dezelfde machine coexisteren.
Wat is de Java Runtime Environment (JRE)?
De JRE is het runtime-pakket dat een computer in staat stelt om Java-programma's uit te voeren. Het bundelt de Java Virtual Machine (JVM), core-bibliotheken en ondersteunende bestanden. Niet-ontwikkelaars die alleen Java-applicaties hoeven uit te voeren, kunnen de JRE installeren in plaats van de volledige JDK.
Wat is de Java Virtual Machine (JVM)?
De JVM is de motor die Java-bytecode interpreteert of just-in-time compileert naar native machinetaal. Het is de kern van het Java-platform, en biedt platform-onafhankelijke uitvoering, geheugenbeheer en beveiliging.
Waarom de JDK gebruiken?
- Bevat de compiler, debugger en launcher die nodig zijn om Java-applicaties te bouwen.
- Stelt ontwikkelaars in staat om bytecode te genereren die op elke JVM draait.
- Biedt tools voor prestaties tuning, code-analyse en documentatie.
Waarom de JRE gebruiken?
- Biedt een kant-en-klaar omgeving om Java-applicaties uit te voeren zonder de overhead van ontwikkeltools.
- Bevat de volledige set core-bibliotheken die vereist zijn door de meeste Java-programma's.
- Ideaal voor eindgebruikers die alleen Java-software hoeven uit te voeren, niet te ontwikkelen.
Waarom de JVM gebruiken?
- Voert Java-bytecode uit op elk platform met een compatibele JVM, waardoor Java's "write once, run anywhere" belofte waar wordt gemaakt.
- Bevat een Just-In-Time (JIT) compiler die prestaties optimaliseert tijdens runtime.
- Beheert geheugentoewijzing, garbage collection en beveiligingschecks.
Belangrijkste kenmerken van de JDK
- Volledige suite ontwikkeltools: compiler, debugger, JavaDoc, en meer.
- Ondersteunt moderne taalfeatures zoals de diamond operator (
<>) voor generics. - Cross-platform: installeer op Windows, macOS, Linux of Solaris.
- Bevat alle componenten van de JRE, wat het een superset maakt.
Belangrijkste kenmerken van de JRE
- Bevat de JVM en core-klassenbibliotheken die nodig zijn om Java-applicaties uit te voeren.
- Biedt deployment-technologieën zoals Java Web Start en de Java Plug-in.
- Bevat networking en database API's zoals JDBC, RMI en JNDI.
- Sluit ontwikkeltools uit, wat het pakket lichtgewicht houdt.
Belangrijkste kenmerken van de JVM
- Interpreteert bytecode of compileert het met JIT voor efficiënte uitvoering.
- Beheert geheugen, garbage collection en beveiligingsbeleid.
- Biedt een flexibele architectuur: class loader, method area, heap en stacks.
- Hardware-onafhankelijk: dezelfde bytecode draait op elk platform met een compatibele JVM.
Hoe de JDK werkt
De JDK integreert de JRE en voegt ontwikkeltools toe. Ontwikkelaars schrijven code, javac compileert het naar bytecode, en de Java launcher (java) start de JVM om het programma uit te voeren.
Hoe de JRE werkt
De JRE bevat de JVM, class loaders en de runtime-bibliotheken. Wanneer een programma wordt gestart, laadt de JVM klassen, verifieert bytecode en voert het uit via de interpreter of JIT-compiler.
Hoe de JVM werkt
De kerncomponenten van de JVM omvatten:
- Class Loader: Laadt, linkt en initialiseert class-bestanden.
- Method Area: Slaat klassestructuren, statische variabelen en methode-bytecode op.
- Heap: Bevat objecten en arrays gedeeld over threads.
- Java Stacks: Slaat lokale variabelen en methode-frames op voor elke thread.
- PC Registers: Volgt de huidige instructie voor elke thread.
- Execution Engine: Voert bytecode uit, gebruikt JIT om hotspots te compileren.
- Native Method Interface & Libraries: Staat integratie met native code toe.
JDK, JRE en JVM vergelijken
| Component | Volledige vorm | Doel | Platform-afhankelijkheid | Inbegrepen tools |
|---|---|---|---|---|
| JDK | Java Development Kit | Complete ontwikkelomgeving voor Java-applicaties. | Platform-afhankelijk | Compiler, debugger, JavaDoc, en meer. |
| JRE | Java Runtime Environment | Voert Java-applicaties uit door core-bibliotheken en de JVM te bieden. | Platform-afhankelijk | Geen (alleen runtime) |
| JVM | Java Virtual Machine | Voert Java-bytecode uit; biedt platform-onafhankelijke runtime. | Platform-afhankelijk (implementatie varieert) | Geen (alleen uitvoeringsmotor) |
Java
- Java Logging Meesteren: Essentiële Best Practices voor Betrouwbare Code
- Java begrijpen: JDK, JRE en JVM uitgelegd
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java if…else beheersen: control flow uitgelegd
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java 10: Geünificeerde JDK Forest Repository
- Java 10 Thread-Local Handshake: Snellere VM-safepoints & prestatieboost