Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง JDK, JRE และ JVM

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)