JDK, JRE และ JVM เป็นองค์ประกอบหลักของ Java Platform ที่เกี่ยวข้องกันแต่มีบทบาทต่างกัน ไม่เหมาะที่จะเปรียบเทียบในตารางเพียงอย่างเดียว มาดูรายละเอียดแต่ละตัวกันก่อน
JVM (Java Virtual Machine)
JVM เป็น Specification (ข้อกำหนด) ที่กำหนด runtime environment สำหรับรัน Java bytecode จุดสำคัญคือ:
- เป็น abstract machine - ไม่ได้เป็น software จริง แต่เป็น規格
- รับผิดชอบแปลง bytecode → machine-specific code
- รันโปรแกรมภาษาอื่นที่ compile เป็น bytecode ได้ (Kotlin, Scala, Groovy, etc.)
- ทำหน้าที่: Load code → Verify code → Execute code → Provide runtime environment
- Implementation จริงๆ มีหลายตัว เช่น HotSpot (Oracle), OpenJ9 (Eclipse), GraalVM
JRE (Java Runtime Environment)
JRE เป็น Implementation ของ JVM + libraries ที่จำเป็นสำหรับรัน Java application ประกอบด้วย:
- JVM implementation (เช่น HotSpot)
- Core libraries (rt.jar / modules ใน Java 9+): java.lang, java.util, java.io, collections, etc.
- Deployment technologies (Java Web Start, Applet - deprecated)
- User interface toolkits (AWT, Swing, JavaFX)
- Integration libraries (JDBC, JNDI, RMI, etc.)
JRE มีจริง (physically exists) ติดตั้งบนเครื่องเพื่อรันโปรแกรม Java เท่านั้น ไม่สามารถ compile ได้
JDK (Java Development Kit)
JDK เป็น Superset ของ JRE + Development Tools สำหรับพัฒนา Java application:
- ทั้งหมดใน JRE
- Compiler:
javac - Debugger:
jdb - Documentation generator:
javadoc - Profiling/Monitoring:
jconsole,visualvm,jcmd,jfr - Packaging:
jar,jmod,jlink - Platform-dependent: มี installer แยกสำหรับ Windows, macOS, Linux
JDK version = Java version (เช่น JDK 17 = Java 17)
ตารางสรุปความแตกต่าง
| ลำดับ | หัวข้อ | JDK | JRE | JVM |
|---|---|---|---|---|
| 1 | ความเป็นมา | Software Development Kit สำหรับพัฒนาแอป | Runtime Environment สำหรับรันแอป | Abstract Specification สำหรับรัน bytecode |
| 2 | ฟังก์ชันหลัก | Compile, Debug, Package, Run | Run เท่านั้น | Execute bytecode, Memory management, GC |
| 3 | Platform Dependency | Platform-dependent | Platform-dependent | Platform-independent (spec) แต่ implementation แล้ว dependent |
| 4 | Tools | มีครบ: javac, javadoc, jdb, jconsole, etc. | ไม่มี development tools | ไม่มี tools |
| 5 | ความสัมพันธ์ | JDK = JRE + Development Tools | JRE = JVM Implementation + Libraries | JVM = Runtime Engine (core) |
| 6 | ใช้เมื่อไหร่ | ตอนพัฒนา (Development) | ตอน Deploy/Production (Run only) | ทำงานเบื้องหลังตลอดเวลา |
สรุปแบบง่าย
JDK ⊃ JRE ⊃ JVM (Implementation)
↑ ↑
Develop Run
นักพัฒนาติดตั้ง JDK | เซิร์ฟเวอร์ Production มักติดตั้งแค่ JRE (หรือแค่ JVM ในบางกรณี เช่น containerized apps)