กลับไปหน้าบทความ

อ่าน 26 นาที

Java (แพลตฟอร์มซอฟต์แวร์)

Java คือชุด ซอฟต์แวร์คอมพิวเตอร์ และข้อกำหนดต่างๆ ที่เป็น แพลตฟอร์มซอฟต์แวร์ สำหรับการพัฒนา แอปพลิเคชันซอฟต์แวร์ และใช้งานใน สภาพแวดล้อมการประมวลผล แบบข้ามแพลตฟอร์ม Java ถูกใช้ใน...

Java (แพลตฟอร์มซอฟต์แวร์)

ฟังบทความนี้

Java (แพลตฟอร์มซอฟต์แวร์)
ผู้เขียนต้นฉบับเจมส์ กอสลิง , ซัน ไมโครซิสเต็มส์
นักพัฒนาบริษัท ออราเคิล คอร์ปอเรชั่น
ปล่อย23 มกราคม พ.ศ. 2539 [ 1 ] [ 2 ] ( 23 มกราคม 1996 )
เวอร์ชันเสถียร26.0.1 (21 เมษายน 2569 [ 3 ] ) [±] ( 21 เมษายน 2026 )

25.0.3 LTS (21 เมษายน 2026 [ 3 ] ) [±] 21.0.11 LTS (21 เมษายน 2026 [ 3 ] ) [±] 17.0.19 LTS (21 เมษายน 2026 [ 3 ] ) [±] 11.0.31 LTS (21 เมษายน 2026 [ 3 ] ) [±] ( 21 เมษายน 2026 ) ( 21 เมษายน 2026 ) ( 21 เมษายน 2026 ) ( 21 เมษายน 2026 )

8u491 LTS (21 เมษายน 2569 [ 3 ] ) [±] ( 21 เมษายน 2026 )
เขียนเป็นJava , C++ , C , ภาษาแอสเซมบลี[ 4 ]
ระบบปฏิบัติการMicrosoft Windows 10+, Linux , macOS , [ 5 ]และสำหรับเวอร์ชันเก่า: Solaris
แพลตฟอร์มx64 , ARMv8และสำหรับเวอร์ชันเก่า: ARMv7 , IA-32 , SPARC (จนถึง Java 14) (Java 8 มี การสนับสนุน 32 บิตสำหรับWindows – แม้ว่า Oracle จะไม่ให้การสนับสนุนฟรีสำหรับการใช้งานเชิงพาณิชย์อีกต่อไปแล้วก็ตาม) [ 5 ]
มีจำหน่ายในอังกฤษ จีน ฝรั่งเศส เยอรมัน อิตาลี ญี่ปุ่น เกาหลี โปรตุเกส สเปน สวีเดน[ 6 ]
พิมพ์แพลตฟอร์มซอฟต์แวร์
ใบอนุญาตใบอนุญาตคู่: ใบอนุญาตสาธารณะทั่วไปของ GNUเวอร์ชัน 2 พร้อมข้อยกเว้นคลาสพาธ[ 7 ]และใบอนุญาตกรรมสิทธิ์[ 8 ]
เว็บไซต์
  • oracle.com/java/
  • java.com
  • dev .java
TuxGuitarโปรแกรมที่ขับเคลื่อนด้วยภาษา Java

Javaคือชุดซอฟต์แวร์คอมพิวเตอร์และข้อกำหนดต่างๆ ที่เป็นแพลตฟอร์มซอฟต์แวร์สำหรับการพัฒนาแอปพลิเคชันซอฟต์แวร์และใช้งานใน สภาพแวดล้อมการประมวลผล แบบข้ามแพลตฟอร์ม Java ถูกใช้ใน แพลตฟอร์มการประมวลผลที่หลากหลายตั้งแต่อุปกรณ์ฝังตัวและโทรศัพท์มือถือไปจนถึงเซิร์ฟเวอร์ระดับองค์กรและซูเปอร์คอมพิวเตอร์แอ ปเพล็ต Javaซึ่งพบได้น้อยกว่าแอปพลิเคชัน Java แบบสแตนด์อโลน มักถูกเรียกใช้งานใน สภาพแวดล้อม แบบแซนด์บ็อกซ์ ที่ปลอดภัย เพื่อให้คุณสมบัติหลายอย่างของแอปพลิเคชันแบบเนทีฟผ่านการฝังอยู่ในหน้า HTML

การเขียนโค้ดด้วยภาษาโปรแกรม Javaเป็นวิธีหลักในการสร้างโค้ดที่จะถูกนำไปใช้งานในรูปแบบไบต์โค้ดในเครื่องเสมือน Java (JVM) นอกจาก นี้ยังมีคอมไพ เลอร์ไบต์โค้ดสำหรับภาษาอื่นๆ เช่น Ada , JavaScript , Kotlin (ภาษา Android ที่ Google นิยมใช้), PythonและRubyยิ่งไปกว่านั้น ยังมีภาษาหลายภาษาที่ออกแบบมาให้ทำงานบน JVM ได้โดยตรง เช่นClojure , GroovyและScala ไวยากรณ์ของ JavaยืมมาจากCและC++อย่าง มาก แต่คุณสมบัติเชิงวัตถุนั้นจำลองมาจากSmalltalkและObjective-C [ 9 ] Javaหลีกเลี่ยง โครงสร้าง ระดับต่ำ บางอย่าง เช่นพอยเตอร์และมีโมเดลหน่วยความจำ ที่เรียบง่ายมาก โดยวัตถุจะถูกจัดสรรบนฮีป (ในขณะที่บางการใช้งาน เช่น ทั้งหมดที่ Oracle รองรับในปัจจุบัน อาจใช้ การเพิ่มประสิทธิภาพ การวิเคราะห์การหลบหนีเพื่อจัดสรรบนสแต็กแทน) และตัวแปรทั้งหมดของประเภทวัตถุเป็นแบบอ้างอิงการจัดการหน่วยความจำ จะดำเนินการผ่าน การรวบรวมขยะอัตโนมัติแบบบูรณาการที่ดำเนินการโดย JVM

เวอร์ชั่นล่าสุด

เวอร์ชันล่าสุดคือJava 26ซึ่งวางจำหน่ายในเดือนมีนาคม 2026

Java 25 ซึ่งเป็น เวอร์ชัน LTS ล่าสุดที่วางจำหน่ายในเดือนกันยายน พ.ศ. 2568 เป็นหนึ่งในเวอร์ชัน LTS เพียงไม่กี่เวอร์ชันที่ยังคงได้รับการสนับสนุนอยู่ ไปจนถึง Java 8 LTS การสนับสนุนเพิ่มเติมของ Oracle สำหรับ Java 6 สิ้นสุดลงในเดือนธันวาคม พ.ศ. 2561 [ 10 ]

ในฐานะแพลตฟอร์มโอเพนซอร์ส Java มีผู้จัดจำหน่ายหลายราย รวมถึงAmazon , IBM , Azul SystemsและAdoptOpenJDKผู้จัดจำหน่ายประกอบด้วย Amazon Corretto, Zulu, AdoptOpenJDK และ Liberica ส่วน Oracle นั้นจัดจำหน่าย Java 8 และยังให้บริการ Java 11 ซึ่งทั้งสองเวอร์ชันเป็นเวอร์ชัน LTS ที่ได้รับการสนับสนุนในปัจจุบัน Oracle (และบริษัทอื่นๆ) "แนะนำอย่างยิ่งให้คุณถอนการติดตั้ง Java เวอร์ชันเก่ากว่า" Java 8 [ 11 ]เนื่องจากมีความเสี่ยงร้ายแรงจากปัญหาด้านความปลอดภัยที่ยังไม่ได้รับการแก้ไข[ 12 ] [ 13 ] [ 14 ]

เนื่องจาก Java 9 (รวมถึงเวอร์ชัน 10, 12–16, 18–20 และ 22–24) ไม่ได้รับการสนับสนุนอีกต่อไป Oracle จึงแนะนำให้ผู้ใช้ "เปลี่ยนไปใช้เวอร์ชันที่ได้รับการสนับสนุนโดยทันที"

Oracle ได้ปล่อยอัปเดตสาธารณะเวอร์ชันสุดท้ายที่ใช้งานได้ฟรีสำหรับการใช้งานเชิงพาณิชย์สำหรับ Java 8 LTS รุ่นเก่าในเดือนมกราคม 2019 และจะยังคงให้การสนับสนุน Java 8 ด้วยการอัปเดตสาธารณะสำหรับการใช้งานส่วนบุคคลต่อไปอย่างไม่มีกำหนด

แพลตฟอร์ม

แพลตฟอร์ม Java คือชุดโปรแกรมที่ช่วยอำนวยความสะดวกในการพัฒนาและเรียกใช้โปรแกรมที่เขียนด้วย ภาษาโปรแกรม Javaแพลตฟอร์ม Java ประกอบด้วยเอนจินการประมวลผล (เรียกว่าเครื่องเสมือน ) คอมไพเลอร์ และชุดไลบรารีนอกจากนี้อาจมีเซิร์ฟเวอร์ เพิ่มเติมและไลบรารีทางเลือกอื่นๆ ขึ้นอยู่กับความต้องการ แพลตฟอร์ม Java ได้รับการพัฒนาขึ้นสำหรับ ฮาร์ดแวร์ และระบบปฏิบัติการ ที่หลากหลายเพื่อให้โปรแกรม Java สามารถทำงานได้อย่างเหมือนกันบนทุกระบบ

แพลตฟอร์ม Java ประกอบด้วยโปรแกรมหลายโปรแกรม โดยแต่ละโปรแกรมจะให้ความสามารถส่วนหนึ่งของแพลตฟอร์มโดยรวม ตัวอย่างเช่นคอมไพเลอร์ Javaซึ่งแปลงซอร์สโค้ด Java เป็นไบต์โค้ด Java (ภาษาระดับกลางสำหรับ JVM) นั้นรวมอยู่ในชุดพัฒนา Java (JDK) ส่วน สภาพแวดล้อมการทำงาน Java (JRE) ซึ่งเสริมการทำงานของ JVM ด้วยคอมไพเลอร์แบบ Just-in-Time (JIT)จะแปลงไบต์โค้ดระดับกลางเป็นโค้ดเครื่องจักรแบบเนทีฟแบบเรียลไทม์ นอกจากนี้ แพลตฟอร์ม Java ยังมีไลบรารีจำนวนมากอีกด้วย

ส่วนประกอบสำคัญในแพลตฟอร์ม ได้แก่ คอมไพเลอร์ภาษา Java ไลบรารี และสภาพแวดล้อมรันไทม์ ซึ่งเป็นที่ที่ไบต์โค้ดระดับกลางของ Java ทำงานตามกฎที่กำหนดไว้ในข้อกำหนดของเครื่องเสมือน

โดเมนแอปพลิเคชัน

แพลตฟอร์มต่างๆ มุ่งเป้าไปที่อุปกรณ์และ แอปพลิเคชันประเภทต่างๆ กัน:

  • Java Card : เทคโนโลยีที่ช่วยให้แอปพลิเคชันขนาดเล็กที่ใช้ภาษา Java ( แอปเพล็ต ) สามารถทำงานได้อย่างปลอดภัยบนสมาร์ทการ์ดและอุปกรณ์หน่วยความจำขนาดเล็กอื่นๆ ที่คล้ายกัน
  • Java ME (Micro Edition): กำหนดชุดไลบรารี (ที่เรียกว่าโปรไฟล์) หลายชุดสำหรับอุปกรณ์ที่มีข้อจำกัดด้านพื้นที่จัดเก็บข้อมูล จอแสดงผล และพลังงาน มักใช้ในการพัฒนาแอปพลิเคชันสำหรับอุปกรณ์พกพา PDA กล่องรับสัญญาณ โทรทัศน์ และเครื่องพิมพ์
  • Java SE (Standard Edition): สำหรับการใช้งานทั่วไปบนคอมพิวเตอร์เดสก์ท็อป เซิร์ฟเวอร์ และอุปกรณ์ที่คล้ายคลึงกัน
  • Jakarta EE (Enterprise Edition): Java SE พร้อมด้วย API ต่างๆ ที่มีประโยชน์สำหรับแอปพลิเคชันระดับองค์กรแบบไคลเอนต์-เซิร์ฟเวอร์หลายระดับ

จาวา เอสอี

Java Platform, Standard Edition (Java SE) เป็นแพลตฟอร์มการประมวลผลมาตรฐานทางเทคนิคสำหรับการดำเนินการแอปพลิเคชันบน แพลตฟอร์ม ที่รองรับ Java อย่างอิสระ เช่น โค้ดพกพาสำหรับสภาพแวดล้อมเดสก์ท็อปและเซิร์ฟเวอร์[ 15 ] [ 16 ] Java SE เดิมเรียกว่า Java 2 Platform, Standard Edition (J2SE)

แพลตฟอร์มนี้ใช้ ภาษาการเขียนโปรแกรม Java และเป็นส่วนหนึ่งของตระกูลแพลตฟอร์มซอฟต์แวร์ Java Java SE กำหนด APIอเนกประสงค์หลากหลายประเภทเช่นJava APIสำหรับJava Class LibraryและยังรวมถึงJava Language SpecificationและJava Virtual Machine Specificationด้วย[ 17 ] OpenJDKเป็นการใช้งานอ้างอิง อย่างเป็นทางการ ตั้งแต่เวอร์ชัน 7 [ 18 ] [ 19 ] [ 20 ]

จาการ์ตา อีอี

Jakarta EEซึ่งเดิมชื่อ Java Platform, Enterprise Edition (Java EE) และ Java 2 Platform, Enterprise Edition (J2EE) เป็นชุดข้อกำหนดที่ขยายJava SE [ 21 ]ด้วยข้อกำหนดสำหรับคุณสมบัติระดับองค์กร เช่นการประมวลผลแบบกระจายและบริการเว็บ [ 22 ]แอปพลิเคชัน Jakarta EE ทำงานบนรันไทม์อ้างอิงซึ่งอาจเป็นไมโครเซอร์วิสหรือเซิร์ฟเวอร์แอปพลิเคชันซึ่งจัดการธุรกรรม ความปลอดภัย ความสามารถในการปรับขนาด การทำงานพร้อมกันและการจัดการส่วนประกอบที่กำลังใช้งาน

เครื่องเสมือน Java

หัวใจสำคัญของแพลตฟอร์ม Java คือ "เครื่องเสมือน" (virtual machine) ที่ใช้ในการประมวลผล โปรแกรม ไบต์โค้ดของ Javaไบต์โค้ดนี้จะเหมือนกันไม่ว่าโปรแกรมจะทำงานบนฮาร์ดแวร์หรือระบบปฏิบัติการใดก็ตาม อย่างไรก็ตาม เวอร์ชันใหม่ ๆ เช่น Java 10 (และเวอร์ชันก่อนหน้า) ได้มีการเปลี่ยนแปลงเล็กน้อย ซึ่งหมายความว่าโดยทั่วไปแล้วไบต์โค้ดจะเข้ากันได้กับเวอร์ชันก่อนหน้า เท่านั้น ภายในเครื่องเสมือน Java (JVM) มี คอมไพเลอร์ แบบ Just-in-Time (JIT) คอมไพเลอร์ JIT จะแปลงไบต์โค้ดของ Java เป็นคำสั่งประมวลผลแบบเนทีฟในระหว่างการทำงาน และแคชโค้ดเนทีฟไว้ในหน่วยความจำระหว่างการประมวลผล

การใช้ไบต์โค้ดเป็นภาษากลางทำให้โปรแกรม Java สามารถทำงานบนแพลตฟอร์มใดก็ได้ที่มีเครื่องเสมือน การใช้คอมไพเลอร์ JIT หมายความว่าแอปพลิเคชัน Java หลังจากความล่าช้าเล็กน้อยระหว่างการโหลดและเมื่อ "อุ่นเครื่อง" โดยการคอมไพล์ JIT ทั้งหมดหรือส่วนใหญ่แล้ว มักจะทำงานได้เร็วพอๆ กับโปรแกรมเนทีฟ[ ​​23 ] [ 24 ] [ 25 ] ตั้งแต่ JRE เวอร์ชัน 1.2 การใช้งาน JVM ของ Sun ได้รวมคอมไพเลอร์แบบ just-in-timeแทนที่จะเป็นตัวแปลภาษา

แม้ว่าโปรแกรม Java จะสามารถทำงาน ได้ บนหลายแพลตฟอร์มหรือไม่ขึ้นอยู่กับแพลตฟอร์ม แต่โค้ดของเครื่องเสมือน Java (JVM) ที่ใช้ในการประมวลผลโปรแกรมเหล่านั้นกลับไม่เป็นเช่นนั้น ระบบปฏิบัติการแต่ละแพลตฟอร์มที่รองรับจะมี JVM ของตนเอง

ชุดพัฒนา Java

Java Development Kit (JDK) เป็นชุดพัฒนาซอฟต์แวร์สำหรับการพัฒนาแอปพลิเคชันบนแพลตฟอร์มJava [ 26 ]

JDK ถูกออกแบบมาเพื่อใช้ในการสื่อสารกับJava Runtime Environment (JRE) เป็นหลัก แต่สามารถแทนที่ด้วยภาษาอื่นๆ ที่ใช้ JDK เป็นพื้นฐาน ซึ่งสามารถสื่อสารกับ JRE และJVMได้ นอกจากนี้ ไบต์โค้ดของ Java สามารถคอมไพล์แบบคงที่โดยตรงเป็นโค้ดเนทีฟได้โดยใช้ JVM เท่านั้น โดยไม่จำเป็นต้องมี Java Runtime Environment ทำงานแบบไดนามิก

มันใช้ Java Language Specification (JLS) และ Java Virtual Machine Specification (JVMS) และจัดเตรียม Java Application Programming Interface (API) รุ่นมาตรฐาน (SE) มันเป็นอนุพันธ์ของ OpenJDKที่ขับเคลื่อนโดยชุมชนซึ่ง Oracle ดูแลอยู่[ 27 ]มันจัดเตรียมซอฟต์แวร์สำหรับการทำงานกับแอปพลิเคชัน Java ตัวอย่างของซอฟต์แวร์ที่รวมอยู่ ได้แก่ Java virtual machine, คอมไพเลอร์, เครื่องมือตรวจสอบประสิทธิภาพ, ดีบักเกอร์ และยูทิลิตี้อื่นๆ ที่ Oracle พิจารณาว่ามีประโยชน์สำหรับโปรแกรมเมอร์ Java

Oracle เผยแพร่ซอฟต์แวร์เวอร์ชันปัจจุบันภายใต้สัญญาอนุญาต Oracle No-Fee Terms and Conditions (NFTC) Oracle เผยแพร่ไฟล์ไบนารีสำหรับ สถาปัตยกรรม x86-64สำหรับ ระบบปฏิบัติการ Windows , macOSและLinuxและสำหรับ สถาปัตยกรรม aarch64สำหรับ macOS และ Linux เวอร์ชันก่อนหน้าสนับสนุน ระบบปฏิบัติการ Oracle Solarisและสถาปัตยกรรม SPARC

Oracle ใช้HotSpot เป็นระบบปฏิบัติการหลักสำหรับ JVMS

สภาพแวดล้อมรันไทม์ Java

Java Runtime Environment (JRE)ที่เผยแพร่โดย Oracle เป็นซอฟต์แวร์ที่ใช้งานได้ฟรี ประกอบด้วย JVM แบบสแตนด์อะโลน(HotSpot) ไลบรารีมาตรฐานของ Java ( Java Class Library ) เครื่องมือการกำหนดค่า และปลั๊กอินสำหรับเบราว์เซอร์ (จนกระทั่งถูกยกเลิกใน JDK 9) JRE เป็นสภาพแวดล้อม Java ที่ติดตั้งบนคอมพิวเตอร์ส่วนบุคคลในรูปแบบ แล็ปท็อปและเดสก์ท็อปได้บ่อยที่สุด โทรศัพท์มือถือรวมถึงฟีเจอร์โฟนและสมาร์ทโฟนรุ่นแรกๆที่มาพร้อมกับ JVM มักจะมี JVM ที่ออกแบบมาเพื่อเรียกใช้แอปพลิเคชันที่กำหนดเป้าหมายไปยังแพลตฟอร์ม Java Micro Edition ในขณะเดียวกัน สมาร์ทโฟน แท็บเล็ตและพีซีพกพา อื่นๆ ในปัจจุบันส่วนใหญ่ ที่เรียกใช้แอป Java มักจะใช้ระบบปฏิบัติการ Androidซึ่งมีเครื่องเสมือนแบบโอเพนซอร์สที่ไม่เข้ากันกับข้อกำหนดของ JVM (ในทางกลับกันเครื่องมือพัฒนา Android ของGoogle รับโปรแกรม Java เป็นอินพุตและส่งออก Dalvik bytecode ซึ่งเป็นรูปแบบอินพุตดั้งเดิมสำหรับเครื่องเสมือนบนอุปกรณ์ Android) เวอร์ชัน Critical Path Update สุดท้ายของ JRE ที่มีข้อตกลง Oracle BCL [ 28 ]คือ 8u201 และเวอร์ชัน Patch Set Update สุดท้ายที่มีใบอนุญาตเดียวกันคือ 8u202 [ 29 ] [ 30 ]การใช้งาน Oracle JRE ครั้งสุดท้าย โดยไม่คำนึงถึงรูปแบบใบอนุญาต คือ 9.0.4 [ 31 ]ตั้งแต่ Java Platform SE 9 เป็นต้นมา แพลตฟอร์มทั้งหมดก็ถูกจัดกลุ่มเป็นโมดูล[ 32 ] การแบ่งโมดูลของการใช้งาน Java SE ช่วยให้นักพัฒนาสามารถรวมแอปพลิเคชันของตนเข้ากับโมดูลทั้งหมดที่ใช้ แทนที่จะพึ่งพาการมีอยู่ของการใช้งาน Java SE ที่เหมาะสมในอุปกรณ์ของผู้ใช้เพียงอย่างเดียว[ 33 ] [ 34 ] [ 35 ] [ 36 ]

ห้องสมุดคลาส

ใน ระบบปฏิบัติการ (OS) สมัยใหม่ส่วนใหญ่ มีโค้ดที่นำกลับมาใช้ซ้ำได้จำนวนมาก เพื่อลดความซับซ้อนในการทำงานของโปรแกรมเมอร์ โค้ดเหล่านี้มักอยู่ในรูปแบบของไลบรารีที่สามารถโหลดได้แบบไดนามิกซึ่งแอปพลิเคชันสามารถเรียกใช้ได้ในขณะทำงาน เนื่องจากแพลตฟอร์ม Java ไม่ขึ้นอยู่กับระบบปฏิบัติการใด ๆ โดยเฉพาะ แอปพลิเคชันจึงไม่สามารถพึ่งพาไลบรารีของระบบปฏิบัติการที่มีอยู่ก่อนแล้วได้ แต่แพลตฟอร์ม Java มีไลบรารีคลาสมาตรฐานของตนเองที่ครอบคลุม ซึ่งประกอบด้วยฟังก์ชันที่นำกลับมาใช้ซ้ำได้มากมายเช่นเดียวกับที่พบได้ทั่วไปในระบบปฏิบัติการสมัยใหม่ ไลบรารีของระบบส่วนใหญ่ก็เขียนด้วยภาษา Java เช่นกัน ตัวอย่างเช่น ไลบรารี Swingจะวาดส่วนติดต่อผู้ใช้และจัดการเหตุการณ์ต่าง ๆ ด้วยตัวเอง ซึ่งช่วยลดความแตกต่างเล็กน้อยระหว่างวิธีการที่แพลตฟอร์มต่าง ๆ จัดการส่วนประกอบต่าง ๆ

ไลบรารีคลาสของ Java มีวัตถุประสงค์สามประการภายในแพลตฟอร์ม Java ประการแรก เช่นเดียวกับไลบรารีโค้ดมาตรฐานอื่นๆ ไลบรารีของ Java ให้ฟังก์ชันชุดหนึ่งที่คุ้นเคยแก่โปรแกรมเมอร์เพื่อทำงานทั่วไป เช่น การจัดการรายการหรือการแยกวิเคราะห์สตริงที่ซับซ้อน ประการที่สอง ไลบรารีคลาสให้ส่วนต่อประสานแบบนามธรรมสำหรับงานที่โดยปกติจะขึ้นอยู่กับฮาร์ดแวร์และระบบปฏิบัติการอย่างมาก งานต่างๆ เช่น การเข้าถึงเครือข่ายและการเข้าถึงไฟล์มักจะเกี่ยวพันอย่างมากกับการใช้งานเฉพาะของแต่ละแพลตฟอร์ม ไลบรารีเหล่านี้จะjava.netสร้างjava.ioเลเยอร์นามธรรมในโค้ดระบบปฏิบัติการดั้งเดิม จากนั้นจึงให้ส่วนต่อประสานมาตรฐานสำหรับแอปพลิเคชัน Java เพื่อทำงานเหล่านั้น ประการสุดท้าย เมื่อแพลตฟอร์มพื้นฐานบางแพลตฟอร์มไม่รองรับคุณสมบัติทั้งหมดที่แอปพลิเคชัน Java คาดหวัง ไลบรารีคลาสจะจัดการกับส่วนประกอบที่ขาดหายไปอย่างราบรื่น ไม่ว่าจะโดยการจำลองเพื่อจัดหาตัวทดแทน หรืออย่างน้อยที่สุดโดยการจัดหาวิธีที่สอดคล้องกันในการตรวจสอบการมีอยู่ของฟีเจอร์เฉพาะ

ภาษา

คำว่า "Java" เพียงอย่างเดียวมักหมายถึงภาษาการเขียนโปรแกรม Java ซึ่งได้รับการออกแบบมาเพื่อใช้กับแพลตฟอร์ม Java โดยทั่วไปแล้วภาษาการเขียนโปรแกรมจะอยู่นอกขอบเขตของวลี "แพลตฟอร์ม" แม้ว่าภาษาการเขียนโปรแกรม Java จะถูกระบุว่าเป็นส่วนหลักของแพลตฟอร์ม Java ก่อน Java 7 ก็ตาม ดังนั้นภาษาและรันไทม์จึงมักถูกพิจารณาว่าเป็นหน่วยเดียวกัน อย่างไรก็ตาม มีความพยายามในข้อกำหนด Java 7 ที่จะแยกภาษา Java และเครื่องเสมือน Java ออกจากกันอย่างชัดเจนมากขึ้น เพื่อไม่ให้ถือว่าเป็นหน่วยเดียวกันอีกต่อไป[ 37 ]

บริษัทภายนอกได้สร้างคอมไพเลอร์หรืออินเตอร์พรีเตอร์ จำนวนมาก ที่มุ่งเป้าไปที่ JVM บางส่วนใช้สำหรับภาษาที่มีอยู่แล้ว ในขณะที่บางส่วนใช้สำหรับส่วนขยายของภาษา Java ตัวอย่างเช่น:

  • BeanShell – ภาษาสคริปต์น้ำหนักเบาสำหรับ Java [ 38 ] (ดูJShell ด้วย )
  • Ceylon – ภาษาโปรแกรมเชิงวัตถุที่มีการกำหนดประเภทข้อมูลอย่างเข้มงวดและคงที่ โดยเน้นที่ความไม่เปลี่ยนแปลง (และไม่มีการบำรุงรักษาอีกต่อไปตั้งแต่ปี 2023)
  • Clojure – ภาษา Lisp ที่ทันสมัย​​มีความยืดหยุ่นและเน้นการทำงานเชิงฟังก์ชันบนแพลตฟอร์ม Java
  • Gosu – ภาษาโปรแกรมอเนกประสงค์ที่ใช้ JVM เป็นพื้นฐาน เผยแพร่ภายใต้ Apache License 2.0
  • Groovy – ภาษาโปรแกรมที่ทำงานร่วมกับ Java ได้อย่างสมบูรณ์ มีไวยากรณ์ที่เข้ากันได้กับ Java รองรับทั้งภาษาแบบสแตติกและไดนามิก พร้อมด้วยคุณสมบัติจาก Python, Ruby, Perl และ Smalltalk
  • JRuby – ตัวแปลภาษาRuby
  • Jython – ตัวแปลภาษา Python
  • Kotlin – ภาษาสำหรับJVM (และไม่ใช่ JVM เช่น เดสก์ท็อปและ iOS) ที่ สามารถทำงานร่วมกับ Java ได้อย่างสมบูรณ์ (เป็นภาษาที่ Google เลือกใช้มากกว่าสำหรับ Android ซึ่งเป็น JVM ของ Google มากกว่า Java ซึ่งยังคงได้รับการสนับสนุนและเคยได้รับการส่งเสริมมาก่อน)
  • Rhino – ตัวแปลภาษา JavaScript
  • Scala – ภาษาโปรแกรมแบบหลายพาราดิกที่มีไวยากรณ์ไม่เหมือนกับ Java ถูกออกแบบมาให้เป็น "Java ที่ดีกว่า"

แพลตฟอร์มที่คล้ายกัน

ความสำเร็จของ Java และ แนวคิด "เขียนครั้งเดียว รันได้ทุกที่"ได้นำไปสู่ความพยายามที่คล้ายคลึงกันอื่นๆ โดยเฉพาะอย่างยิ่ง . NET Frameworkซึ่งปรากฏขึ้นตั้งแต่ปี 2002 และได้รวมเอาแง่มุมที่ประสบความสำเร็จหลายอย่างของ Java เข้าไว้ด้วยกัน .NET ถูกสร้างขึ้นมาตั้งแต่เริ่มต้นเพื่อรองรับภาษาโปรแกรมหลายภาษา ในขณะที่แพลตฟอร์ม Java ถูกสร้างขึ้นมาเพื่อรองรับเฉพาะภาษา Java เท่านั้น แม้ว่าจะมีภาษาอื่นๆ อีกมากมายที่ถูกสร้างขึ้นสำหรับ JVM ในภายหลังก็ตาม เช่นเดียวกับ Java ภาษา .NET จะคอมไพล์เป็นไบต์โค้ดและถูกประมวลผลโดยCommon Language Runtime (CLR) ซึ่งมีจุดประสงค์คล้ายกับ JVM เช่นเดียวกับ JVM CLR ให้การจัดการหน่วยความจำผ่านการเก็บขยะอัตโนมัติ และอนุญาตให้ไบต์โค้ด .NET ทำงานบนระบบปฏิบัติการหลายระบบได้

.NET มีภาษาที่คล้ายกับ Java ซึ่งเดิมชื่อJ++แล้วเปลี่ยนเป็นVisual J#แต่ภาษานี้ไม่สามารถใช้งานร่วมกับข้อกำหนดของ Java ได้ จึงถูกยกเลิกในปี 2007 และการสนับสนุนสิ้นสุดลงในปี 2015

ผลงาน

ข้อกำหนดของ JVM เปิดโอกาสให้ผู้พัฒนาสามารถกำหนดรายละเอียดการใช้งานได้ค่อนข้างมาก ตั้งแต่ Java 1.3 เป็นต้นมา JRE จาก Oracle ก็มี JVM ที่เรียกว่า HotSpot ซึ่งได้รับการออกแบบให้เป็น JVM ที่มีประสิทธิภาพสูง

เพื่อเร่งความเร็วในการประมวลผลโค้ด HotSpot ใช้การคอมไพล์แบบทันที (just-in-time compilation) และเพื่อเร่งความเร็วในการจัดสรรอ็อบเจ็กต์และการเก็บขยะ HotSpot ใช้ฮีปแบบแบ่งรุ่น (generational heap)

กองรุ่นต่อรุ่น

ฮีป ของเครื่องเสมือน Javaคือพื้นที่หน่วยความจำที่ JVM ใช้สำหรับการจัดสรรหน่วยความจำแบบไดนามิก[ 39 ]

ใน HotSpot หน่วยความจำแบบฮีปจะถูกแบ่งออกเป็นเจเนอเรชั่น :

  • คนรุ่นใหม่ มักเก็บสะสม สิ่งของที่มีอายุการใช้งานสั้นซึ่งถูกสร้างขึ้นและถูกนำไปทิ้งเป็นขยะทันที
  • วัตถุที่คงอยู่ได้นานกว่าจะถูกย้ายไปยังหน่วยความจำรุ่นเก่า (เรียกอีกอย่างว่าหน่วยความจำที่คงอยู่ ) หน่วยความจำนี้จะถูกแบ่งย่อยออกเป็น (สอง) พื้นที่สำหรับผู้รอดชีวิต ซึ่งเป็นที่เก็บวัตถุที่รอดพ้นจากการเก็บขยะครั้งแรกและครั้งถัดไป

พื้นที่หน่วยความจำถาวร (หรือpermgen ) ถูกใช้สำหรับการกำหนดคลาสและเมตาเดตาที่เกี่ยวข้องก่อน Java 8 พื้นที่หน่วยความจำถาวรไม่ได้เป็นส่วนหนึ่งของฮีป[ 40 ] [ 41 ]พื้นที่หน่วยความจำถาวรถูกลบออกจาก Java 8 [ 42 ]

เดิมทีไม่มีการสร้างถาวร และวัตถุและคลาสจะถูกจัดเก็บไว้ด้วยกันในพื้นที่เดียวกัน แต่เนื่องจากการยกเลิกการโหลดคลาสเกิดขึ้นน้อยกว่าการรวบรวมวัตถุมาก การย้ายโครงสร้างคลาสไปยังพื้นที่เฉพาะทำให้ประสิทธิภาพดีขึ้นอย่างมาก[ 40 ]

ความปลอดภัย

Java JRE ถูกติดตั้งบนคอมพิวเตอร์จำนวนมาก ผู้ใช้ปลายทางที่มีเวอร์ชัน JRE ที่ล้าสมัยจึงมีความเสี่ยงต่อการโจมตีที่รู้จักกันดีหลายประการ ส่งผลให้เกิดความเชื่อที่แพร่หลายว่า Java นั้นไม่ปลอดภัยโดยเนื้อแท้[ 43 ]ตั้งแต่ Java 1.7 เป็นต้นมา JRE สำหรับ Windows ของ Oracle มีฟังก์ชันการอัปเดตอัตโนมัติ

ก่อนที่จะมีการยกเลิกปลั๊กอินเบราว์เซอร์ Java เว็บเพจใดๆ ก็อาจเรียกใช้แอปเพล็ต Java ซึ่งเป็นช่องทางโจมตี ที่เข้าถึงได้ง่าย สำหรับเว็บไซต์ที่เป็นอันตราย ในปี 2013 Kaspersky Labs รายงานว่าปลั๊กอิน Java เป็นวิธีการที่อาชญากรคอมพิวเตอร์เลือกใช้ ช่องโหว่ Java ถูกรวมอยู่ในชุดช่องโหว่จำนวนมากที่แฮกเกอร์นำไปใช้กับเว็บไซต์ที่ถูกแฮก[ 44 ]แอปเพล็ต Java ถูกลบออกใน Java 11 ซึ่งวางจำหน่ายเมื่อวันที่ 25 กันยายน 2018

เวอร์ชัน Java

เวอร์ชัน Javaปี การเปลี่ยนแปลง
262026เวอร์ชันทั่วไป (ไม่ใช่ LTS)
252025การเผยแพร่เวอร์ชันที่มีการสนับสนุนระยะยาว (LTS)
212023การเผยแพร่เวอร์ชันที่มีการสนับสนุนระยะยาว (LTS)
172021เวอร์ชัน LTS นี้มีการปรับปรุงหลายอย่าง รวมถึงการจับคู่รูปแบบสำหรับ คำสั่ง switchและคลาสแบบปิดผนึก
162021มีการนำคลาสเรคอร์ดการจับคู่รูปแบบและคลาสปิดผนึก มา ใช้เพื่อเพิ่มประสิทธิภาพในการสร้างแบบจำลองข้อมูล
152020มีการแนะนำบล็อกข้อความและคลาสที่ปิดผนึกเป็นคุณสมบัติทดลองใช้งาน เพื่อปรับปรุงการจัดการสตริงและคลาส
142020มีการแนะนำคุณสมบัติใหม่ ได้แก่คลาสบันทึกและการจับคู่รูปแบบสำหรับinstanceofในรูปแบบฟีเจอร์ทดลอง
132019รวมถึงการปรับปรุงต่างๆบล็อกข้อความ และการนำ API Socketเดิมกลับมาใช้งานใหม่
122019มีการแนะนำนิพจน์สวิตช์ และ ตัวเก็บขยะ Shenandoahใหม่
112018เวอร์ชัน LTS ใหม่นี้ ได้เพิ่มไคลเอ็นต์ HTTP ใหม่ และลบโมดูล Java EE และ CORBA ออกไป
102018มีการเพิ่มการอนุมานประเภทตัวแปรโลคอล (var) ซึ่งช่วยให้สามารถประกาศตัวแปรโลคอลได้โดยไม่ต้องระบุประเภท
92017มีการนำระบบโมดูลของแพลตฟอร์ม Java (JPMS) มาใช้เพื่อแบ่งแอปพลิเคชันออกเป็นโมดูล และJShellซึ่งเป็น REPL แบบโต้ตอบของ Java
82014การอัปเดตครั้งใหญ่ได้เพิ่มLambda Expressions และ API วันที่และเวลาใหม่เพื่อเพิ่มประสิทธิภาพการทำงานให้ดียิ่งขึ้น
72011มีการเพิ่มฟังก์ชัน try-with-resources , Switch on String , Diamond Operatorรวมถึงการจัดการข้อยกเว้นที่ได้รับการปรับปรุง และไลบรารี I/O ไฟล์ใหม่ (NIO.2)
62006มีการแนะนำการสนับสนุนภาษาสคริปต์ (JSR 223) การปรับปรุงบริการเว็บและรองรับ JDBC 4.0 พร้อมการสนับสนุน SQL XML
52004การอัปเดตครั้งสำคัญ ประกอบด้วยGenerics , for Loop ที่ได้รับการปรับปรุง , Autoboxing/Unboxing , Static Import , Varargs , EnumerationsและAnnotations
42002มีการแนะนำRegular Expressions , Exception Chaining , ชุด API อินพุต/เอาต์พุตใหม่ชื่อ NIO (New Input/Output) และAPI การบันทึกข้อมูล ใหม่
32000รวมถึง JVM ใหม่ของ Sun ที่ชื่อHotSpotและแนะนำJava Naming and Directory Interface (JNDI) และJava Platform Debugger Architecture (JPDA)
21998มีการแนะนำCollections Framework , Java String memory map สำหรับค่าคงที่ , คอมไพเลอร์แบบ Just In Time (JIT)และSwing API สำหรับ GUI
1.1พ.ศ. 2540มีการแนะนำคลาสภายใน (Inner Classes) , การสะท้อน (Reflection) , จาวาบีนส์ (Java Beans ) และAPI JDBCสำหรับการเข้าถึงฐานข้อมูล
1.0พ.ศ. 2539ภาษาโปรแกรม Java เวอร์ชันแรกได้นำเสนอการเขียนโปรแกรมเชิงวัตถุและไบต์โค้ดใน Java ซึ่งทำให้ Java สามารถใช้งานได้บนหลายแพลตฟอร์ม

ประวัติศาสตร์

เจมส์ กอสลิง

Java เริ่มต้นจากโครงการภายในของSun Microsystemsในเดือนธันวาคม พ.ศ. 2533 โดยนำเสนอทางเลือกอื่นนอกเหนือจากภาษาโปรแกรม C++/ C วิศวกร Patrick Naughtonรู้สึกไม่พอใจมากขึ้นเรื่อยๆ กับสถานะของอินเทอร์เฟซการเขียนโปรแกรมแอปพลิ เคชัน (API) และเครื่องมือ C++ และ C ของ Sun รวมถึงวิธี การจัดการโครงการ NeWSขององค์กร Naughton แจ้งScott McNealyเกี่ยวกับแผนการของเขาที่จะออกจาก Sun และย้ายไปNeXT ; McNealy ขอให้เขาแสร้งทำเป็นพระเจ้าและส่งอีเมลอธิบายวิธีการแก้ไขปัญหาของบริษัท Naughton จินตนาการถึงการสร้างทีมเล็กๆ ที่สามารถทำงานได้อย่างอิสระโดยปราศจากระบบราชการที่ทำให้โครงการอื่นๆ ของ Sun หยุดชะงัก McNealy ส่งต่อข้อความไปยังบุคคลสำคัญอื่นๆ ที่ Sun และโครงการ Stealthก็เริ่มต้นขึ้น[ 45 ]

โครงการ Stealth Project ได้รับการเปลี่ยนชื่อเป็นGreen Project ในเวลาต่อมา โดยมีJames Goslingและ Mike Sheridan เข้าร่วมกับ Naughton พวกเขาร่วมกับวิศวกรคนอื่นๆ เริ่มทำงานในสำนักงานเล็กๆ บนถนน Sand Hill Roadในเมือง Menlo Park รัฐแคลิฟอร์เนียพวกเขามุ่งมั่นที่จะพัฒนาเทคโนโลยีใหม่สำหรับการเขียนโปรแกรมเครื่องใช้ไฟฟ้าอัจฉริยะรุ่นต่อไป ซึ่ง Sun คาดว่าจะนำมาซึ่งโอกาสใหม่ๆ มากมาย[ 46 ]

เดิมทีทีมงานพิจารณาใช้ C++ แต่ก็ปฏิเสธไปเนื่องจากหลายสาเหตุ เนื่องจากพวกเขากำลังพัฒนาระบบฝังตัวที่มีทรัพยากรจำกัด พวกเขาจึงตัดสินใจว่า C++ ต้องการหน่วยความจำมากเกินไป และความซับซ้อนของมันนำไปสู่ข้อผิดพลาดของนักพัฒนา การที่ภาษาขาดการจัดการหน่วยความจำอัตโนมัติ (garbage collection)หมายความว่าโปรแกรมเมอร์ต้องจัดการหน่วยความจำของระบบด้วยตนเอง ซึ่งเป็นงานที่ท้าทายและมีโอกาสเกิดข้อผิดพลาดสูง ทีมงานยังกังวลเกี่ยวกับการที่ภาษา C++ ขาดคุณสมบัติที่พกพาได้สำหรับด้านความปลอดภัยการเขียนโปรแกรมแบบกระจายและการทำงานแบบมัลติเธรดสุดท้าย พวกเขาต้องการแพลตฟอร์มที่สามารถพอร์ตไปยังอุปกรณ์ทุกประเภทได้อย่างง่ายดาย

บิล จอยได้จินตนาการถึงภาษาใหม่ที่ผสมผสานMesaและ C เข้าด้วยกัน ในเอกสารชื่อFurtherเขาเสนอให้ Sun ว่าวิศวกรของบริษัทควรสร้าง สภาพแวดล้อม เชิงวัตถุโดยอิงจาก C++ ในตอนแรก กอสลิงพยายามแก้ไขและขยาย C++ (การพัฒนาที่เขาเสนอเรียกว่า "C++ ++ --") แต่ในไม่ช้าก็ละทิ้งไปเพื่อสร้างภาษาใหม่ ซึ่งเขาเรียกว่าOakตามชื่อต้นไม้ที่อยู่ด้านนอกสำนักงานของเขา[ 47 ]

ภายในฤดูร้อนปี 1992 ทีมงานสามารถสาธิตส่วนต่างๆ ของแพลตฟอร์มใหม่ได้ รวมถึง Green OSภาษา Oak ไลบรารี และฮาร์ดแวร์ การสาธิตครั้งแรกของพวกเขาในวันที่ 3 กันยายน 1992 มุ่งเน้นไปที่การสร้าง อุปกรณ์ ผู้ช่วยดิจิทัลส่วนบุคคล (PDA) ชื่อStar7 [1]ซึ่งมีอินเทอร์เฟซแบบกราฟิกและตัวแทนอัจฉริยะชื่อ "Duke" เพื่อช่วยเหลือผู้ใช้ ในเดือนพฤศจิกายนของปีนั้น โครงการ Green ได้แยกตัวออกมาเป็นFirstpersonซึ่งเป็นบริษัทในเครือของ Sun Microsystems และทีมงานได้ย้ายไปที่Palo Alto รัฐแคลิฟอร์เนีย [ 48 ] ทีมงาน Firstperson มีความสนใจในการสร้างอุปกรณ์แบบโต้ตอบสูง และเมื่อTime Warnerออกคำขอข้อเสนอ (RFP) สำหรับกล่องรับสัญญาณ Firstperson จึงเปลี่ยนเป้าหมายและตอบกลับด้วยข้อเสนอสำหรับแพลตฟอร์มกล่องรับสัญญาณ อย่างไรก็ตาม อุตสาหกรรม เคเบิลรู้สึกว่าแพลตฟอร์มของพวกเขามอบการควบคุมให้กับผู้ใช้มากเกินไป ดังนั้น Firstperson จึงแพ้การประมูลให้กับSGIข้อตกลงเพิ่มเติมกับบริษัท 3DOสำหรับกล่องรับสัญญาณก็ไม่ประสบผลสำเร็จเช่นกัน เนื่องจากไม่สามารถสร้างความสนใจในอุตสาหกรรมโทรทัศน์ได้ บริษัทจึงถูกควบรวมกลับเข้ากับบริษัทซันอีกครั้ง

Java พบกับเว็บ

จอห์น เกจ

ในเดือนมิถุนายนและกรกฎาคม พ.ศ. 2537 – หลังจากระดมสมองเป็นเวลาสามวันกับJohn Gage (ผู้อำนวยการฝ่ายวิทยาศาสตร์ของ Sun), Gosling, Joy, Naughton, Wayne RosingและEric Schmidt  – ทีมงานได้กำหนดเป้าหมายแพลตฟอร์มใหม่สำหรับWorld Wide Webพวกเขารู้สึกว่าด้วยการมาถึงของเว็บเบราว์เซอร์ แบบกราฟิก เช่นMosaicอินเทอร์เน็ตสามารถพัฒนาไปสู่สื่อที่มีการโต้ตอบสูงแบบเดียวกับที่พวกเขาจินตนาการไว้สำหรับเคเบิลทีวี ในฐานะต้นแบบ Naughton ได้เขียนเบราว์เซอร์ขนาดเล็กชื่อ WebRunner (ตั้งชื่อตามภาพยนตร์เรื่อง Blade Runner ) ซึ่งเปลี่ยนชื่อเป็นHotJava [ 46 ]ในปี พ.ศ. 2538

ซันเปลี่ยนชื่อภาษา Oak เป็นJavaหลังจาก การค้นหา เครื่องหมายการค้าพบว่าOak Technologyใช้ชื่อOak [ 49 ] ซันตั้งราคาใบอนุญาต Java ต่ำกว่าต้นทุนเพื่อแย่งชิงส่วนแบ่งการตลาด[ 50 ] แม้ว่า Java 1.0a จะพร้อมให้ดาวน์โหลดในปี 1994 แต่การเปิดตัว Java สู่สาธารณะ ครั้งแรกคือ Java 1.0a2 พร้อมกับเบราว์เซอร์ HotJava เกิดขึ้นเมื่อวันที่ 23 พฤษภาคม 1995 ซึ่งประกาศโดย Gage ในการประชุม SunWorld พร้อมกับการประกาศของ Gage นั้นMarc AndreessenรองประธานบริหารของNetscape Communications Corporationได้ประกาศอย่างไม่คาดคิดว่าเบราว์เซอร์ Netscape จะรองรับ Java ด้วย เมื่อวันที่ 9 มกราคม 1996 Sun Microsystems ได้ก่อตั้งกลุ่ม JavaSoft เพื่อพัฒนาเทคโนโลยีนี้[ 51 ]

แม้ว่าแอปเพล็ต Java สำหรับเว็บเบราว์เซอร์จะไม่ใช่การใช้งาน Java ที่ได้รับความนิยมมากที่สุดอีกต่อไป (เช่น การใช้งานฝั่งเซิร์ฟเวอร์มากกว่า) หรือวิธีการรันโค้ดฝั่งไคลเอ็นต์ที่ได้รับความนิยมมากที่สุด (JavaScript ได้รับความนิยมมากกว่า) แต่ก็ยังคงสามารถรัน Java (หรือภาษา JVM อื่นๆ เช่น Kotlin) ในเว็บเบราว์เซอร์ได้ แม้ว่าเบราว์เซอร์เหล่านั้นจะยกเลิกการสนับสนุน JVM ไปแล้วก็ตาม โดยใช้TeaVMเป็นต้น

ใบอนุญาตสาธารณะทั่วไปของ GNU

เมื่อวันที่ 13 พฤศจิกายน พ.ศ. 2549 Sun Microsystems ได้เปิดให้ใช้งาน Java ส่วนใหญ่ภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU (GPL) [ 52 ] [ 53 ]

ประวัติเวอร์ชัน

ภาษา Java ได้มีการเปลี่ยนแปลงหลายอย่างนับตั้งแต่มีการเปิดตัว JDK ( Java Development Kit ) 1.0 เมื่อวันที่ 23 มกราคม 1996 รวมถึงการเพิ่มคลาสและแพ็กเกจจำนวนมากในไลบรารี มาตรฐาน นับตั้งแต่ J2SE 1.4 เป็นต้นมาJava Community Process (JCP) ได้ควบคุมการพัฒนาของภาษา Java JCP ใช้Java Specification Requests (JSRs) เพื่อเสนอและระบุส่วนเพิ่มเติมและการเปลี่ยนแปลงในแพลตฟอร์ม Java Java Language Specification (JLS) ระบุภาษา การเปลี่ยนแปลง JLS จะได้รับการจัดการภายใต้ JSR 901 [ 54 ]

Sun ได้ออกJDK 1.1เมื่อวันที่ 19 กุมภาพันธ์ 1997 โดยมีการเปลี่ยนแปลงที่สำคัญหลายประการ ได้แก่ การปรับปรุงโมเดลเหตุการณ์ของAbstract Window Toolkit (AWT) อย่างครอบคลุม การเพิ่ม คลาสภายในให้กับภาษาJavaBeansและJava Database Connectivity (JDBC)

J2SE 1.2 (8 ธันวาคม 1998) – ชื่อรหัสPlaygroundเวอร์ชันนี้และเวอร์ชันต่อๆ ไปจนถึง J2SE 5.0 ได้รับการเปลี่ยน ชื่อเป็น Java 2และชื่อเวอร์ชัน "J2SE" ( Java 2 Platform, Standard Edition ) แทนที่ JDK เพื่อแยกแพลตฟอร์มพื้นฐานออกจาก J2EE ( Java 2 Platform, Enterprise Edition ) และ J2ME ( Java 2 Platform, Micro Edition ) ส่วนเพิ่มเติมที่สำคัญ ได้แก่ การสะท้อน ( reflection ) เฟรมเวิร์ก สำหรับคอลเลก ชันJava IDL ( การใช้งานภาษาอธิบายอินเทอร์เฟซ สำหรับการทำงานร่วมกัน ของ CORBA ) และการรวม API กราฟิก Swingเข้ากับคลาสหลัก มีการเปิดตัว ปลั๊กอิน Java (ตั้งแต่นั้นมา ผู้ผลิตเว็บเบราว์เซอร์ได้ลบการสนับสนุนออกไป และตอนนี้ถือว่าล้าสมัยเนื่องจากการลบโค้ดเบส Java และจะถูกลบออกโดย Java 26 ในปี 2026 [ 55 ] ) และ JVM ของ Sun ได้รับการติดตั้งคอมไพเลอร์ JITเป็นครั้งแรก

J2SE 1.3 (8 พฤษภาคม 2000) – ชื่อรหัสKestrelการเปลี่ยนแปลงที่สำคัญได้แก่ การรวมHotSpot JVM (HotSpot JVM เปิดตัวครั้งแรกในเดือนเมษายน 1999 สำหรับ J2SE 1.2 JVM), JavaSound , Java Naming and Directory Interface (JNDI) และJava Platform Debugger Architecture (JPDA)

J2SE 1.4 (6 กุมภาพันธ์ 2545) – รหัสชื่อMerlinเวอร์ชันนี้กลายเป็นเวอร์ชันแรกของแพลตฟอร์ม Java ที่พัฒนาภายใต้กระบวนการชุมชน Java ในชื่อ JSR 59 [ 56 ] การเปลี่ยนแปลงที่สำคัญ ได้แก่นิพจน์ปกติที่จำลองมาจากPerl การเชื่อมโยงข้อยกเว้น ตัวแยก วิเคราะห์ XMLและ ตัวประมวลผล XSLTแบบบูรณาการ( JAXP ) และJava Web Start

J2SE 5.0 (30 กันยายน 2547) – ชื่อรหัสTigerเดิมทีมีหมายเลข 1.5 ซึ่งยังคงใช้เป็นหมายเลขเวอร์ชันภายใน[ 57 ]พัฒนาภายใต้ JSR 176 Tiger ได้เพิ่มคุณสมบัติภาษาใหม่ที่สำคัญหลายประการ รวมถึงลูป for-each , generics , autoboxingและvar- args [ 58 ]

Java SE 6 (11 ธันวาคม 2006) – ชื่อรหัสMustangมันถูกรวมเข้ากับตัวจัดการฐานข้อมูลและอำนวยความสะดวกในการใช้ภาษาสคริปต์กับ JVM (เช่นJavaScriptโดยใช้ เอนจิน RhinoของMozilla ) ในเวอร์ชันนี้ Sun ได้เปลี่ยนชื่อ "J2SE" เป็นJava SEและตัด ".0" ออกจากหมายเลขเวอร์ชัน[ 59 ]การเปลี่ยนแปลงที่สำคัญอื่นๆ ได้แก่ การสนับสนุนคำอธิบายประกอบ แบบเสียบปลั๊กได้ ( JSR 269 ) การปรับปรุง GUI หลายอย่าง รวมถึงการปรับปรุง UI ดั้งเดิมเพื่อรองรับรูปลักษณ์และความรู้สึกของWindows VistaและการปรับปรุงJava Platform Debugger Architecture (JPDA) และ JVM Tool Interface เพื่อการตรวจสอบและแก้ไขปัญหาที่ดีขึ้น

Java SE 7 (28 กรกฎาคม 2011) – ชื่อรหัสDolphinเวอร์ชันนี้ได้รับการพัฒนาภายใต้ JSR 336 [ 60 ]มีการเพิ่มการเปลี่ยนแปลงภาษาเล็กๆ น้อยๆ หลายอย่าง รวมถึงสตริงใน switch, try-with-resources และการอนุมานประเภทสำหรับการสร้างอินสแตนซ์ทั่วไป JVM ได้รับการขยายเพื่อรองรับภาษาแบบไดนามิก ในขณะที่ไลบรารีคลาสได้รับการขยายเพิ่มเติมด้วยเฟรมเวิร์ก join/fork [ 61 ]ไลบรารี I/O ไฟล์ใหม่ที่ได้รับการปรับปรุง และการสนับสนุนโปรโตคอลเครือข่ายใหม่ เช่นSCTP Java 7 Update 76 ได้รับการเผยแพร่ในเดือนมกราคม 2015 โดยมีวันหมดอายุ 14 เมษายน 2015 [ 62 ]

ในเดือนมิถุนายน พ.ศ. 2559 หลังจากการอัปเดตสาธารณะครั้งสุดท้ายของ Java 7 [ 63 ] ได้มีการประกาศช่องโหว่ด้านความปลอดภัยที่ " สามารถโจมตีจากระยะไกลได้ " ใน Java 6, 7 และ 8 [ 13 ]

Java SE 8 (18 มีนาคม 2014) – ชื่อรหัสKenaiการเปลี่ยนแปลงที่สำคัญ ได้แก่ การสนับสนุนระดับภาษาสำหรับนิพจน์แลมบ์ดา ( closures ) และเมธอดเริ่มต้น รันไทม์ JavaScript ของ Project Nashorn API วันที่และเวลาใหม่ที่ได้รับแรงบันดาลใจจาก Joda Time และการลบ PermGen เวอร์ชันนี้ไม่ได้รับการสนับสนุนอย่างเป็นทางการบนแพลตฟอร์มWindows XP [ 64 ]แต่เป็นที่ทราบกันว่าใช้งานได้ ดังนั้น เนื่องจากการสิ้นสุดของวงจรชีวิตของ Java 7 จึงเป็นเวอร์ชันที่แนะนำสำหรับผู้ใช้ XP ก่อนหน้านี้ มีเพียงวิธีการติดตั้งด้วยตนเองที่ไม่เป็นทางการเท่านั้นที่ได้รับการอธิบายสำหรับ Windows XP SP3 ซึ่งหมายถึง JDK8 ซึ่งเป็นแพลตฟอร์มการพัฒนาสำหรับ Java ที่รวมถึงJava Runtime Environmentที่ ทำงานได้อย่างสมบูรณ์ [ 65 ] Java 8 ได้รับการสนับสนุนบน Windows Server 2008 R2 SP1, Windows Vista SP2 และ Windows 7 SP1, Ubuntu 12.04 LTS ขึ้นไป (และระบบปฏิบัติการอื่นๆ บางระบบ) [ 66 ]

Java SE 9และ10มีข้อกำหนดระบบที่สูงขึ้น เช่น Windows 7 หรือ Server 2012 (และเบราว์เซอร์เว็บขั้นต่ำที่ได้รับการรับรองเพิ่มขึ้นเป็นInternet Explorer 11หรือเบราว์เซอร์เว็บอื่นๆ) และ Oracle ได้ยกเลิก ความเข้ากันได้ แบบ 32 บิตสำหรับทุกแพลตฟอร์ม กล่าวคือ มีเพียง " JVM 64 บิต ของ Oracle เท่านั้นที่ได้รับการรับรอง" [ 67 ]

Java SE 11 LTS เปิดตัวในเดือนกันยายน 2018 ซึ่ง เป็นการเปิดตัว LTS ครั้งแรก นับตั้งแต่ มีการนำรูปแบบ การเปิดตัวอย่างรวดเร็วมาใช้ตั้งแต่เวอร์ชัน 9 เป็นครั้งแรกที่ OpenJDK 11 นำเสนอซอร์สโค้ดที่สมบูรณ์สำหรับแพลตฟอร์ม Java ภายใต้ใบอนุญาต GNU General Public License และในขณะที่ Oracle ยังคงให้ใบอนุญาตแบบคู่ขนานกับใบอนุญาตกรรมสิทธิ์ที่เป็นตัวเลือก แต่ก็ไม่มีความแตกต่างของโค้ดหรือโมดูลใด ๆ ที่เป็นเอกลักษณ์เฉพาะในเวอร์ชันที่ได้รับใบอนุญาตกรรมสิทธิ์[ 68 ]คุณสมบัติของ Java 11 ประกอบด้วยการใช้งานตัวเก็บขยะแบบใหม่สองแบบ, Flight Recorder สำหรับการดีบักปัญหาที่ซับซ้อน, ไคลเอ็นต์ HTTP ใหม่รวมถึงการสนับสนุนWebSocket [ 69 ]

Java SE 12เปิดตัวในเดือนมีนาคม พ.ศ. 2562 [ 70 ]

Java SE 13เปิดตัวในเดือนกันยายน พ.ศ. 2562 [ 71 ]

Java SE 14เปิดตัวในเดือนมีนาคม พ.ศ. 2563 [ 72 ]

Java SE 15เปิดตัวในเดือนกันยายน 2020

Java SE 16เปิดตัวเมื่อเดือนมีนาคม 2021

Java SE 17 LTS เปิดตัวในเดือนกันยายน 2021

Java SE 18เปิดตัวเมื่อเดือนมีนาคม 2022

Java SE 19เปิดตัวในเดือนกันยายน 2022

Java SE 20เปิดตัวเมื่อเดือนมีนาคม 2023

Java SE 21 LTS เปิดตัวในเดือนกันยายน 2023

Java SE 22เปิดตัวในเดือนมีนาคม 2024

นอกเหนือจากการเปลี่ยนแปลงภาษาแล้ว ยังมีการเปลี่ยนแปลงที่สำคัญเกิดขึ้นกับไลบรารีคลาส Java ตลอดหลายปีที่ผ่านมา ซึ่งเติบโตจากคลาสไม่กี่ร้อยคลาสใน JDK 1.0 เป็นมากกว่าสามพันคลาสใน J2SE 5.0 API ใหม่ทั้งหมด เช่นSwingและJava 2Dได้พัฒนาขึ้น และคลาสและเมธอดดั้งเดิมจำนวนมากใน JDK 1.0 ได้ถูกยกเลิกการใช้งาน (โดยบางส่วนถูก "ยกเลิกการใช้งานอย่างถาวร") เช่น ที่เกี่ยวข้องกับการสิ้นสุดการทำงาน[ 73 ]

API ที่ใช้งานน้อยมากอย่างน้อยหนึ่งรายการ (สำหรับการทำงานแบบมัลติเธรด) ได้ถูกลบออกจาก Java 22 แล้ว[ 74 ] [ 75 ]

การใช้งาน

ใช้งานบนเดสก์ท็อป

โปรแกรม Java ที่ทำงานบน คอมพิวเตอร์เดสก์ท็อป Windows Vista (รองรับโดย Java 8 แต่ไม่รองรับอย่างเป็นทางการในเวอร์ชันที่ใหม่กว่า เช่น Java 11)

Java เวอร์ชันปัจจุบันรองรับบน Windows 10 (และ Server 2016) และเวอร์ชันที่ใหม่กว่าแบบ 64 บิต, macOS 13.x และเวอร์ชันที่ใหม่กว่าแบบ 64 บิต และ Linux แบบ 64 บิต (เช่น Oracle Enterprise Linux) ส่วนระบบปฏิบัติการอื่นๆ นั้น Oracle ไม่รองรับ (สำหรับการคอมไพล์ แต่ IBM, SAP ฯลฯ อาจรองรับ) แม้ว่าจะทราบกันว่าใช้งานได้ เช่น AIX, Ubuntu, RHEL และ Alphine/ muslการรองรับ Windows แบบ 32 บิตนั้นถูกยกเลิกไปแล้วตั้งแต่ Java 22 (และ JVM แบบ 32 บิตจะไม่สามารถคอมไพล์ได้หากไม่มีตัวเลือกที่ไม่ใช่ค่าเริ่มต้น)

ตามข้อมูลของ Oracle ในปี 2010 พบว่า Java Runtime Environment มีอยู่ในพีซีมากกว่า 850 ล้านเครื่อง[ 76 ] Microsoftไม่ได้รวมJava Runtime Environment (JRE) ไว้ในระบบปฏิบัติการ ของตนอีกต่อ ไปนับตั้งแต่ Sun Microsystems ฟ้อง Microsoft เนื่องจากเพิ่มคลาสเฉพาะของ Windows ลงใน Java runtime environment ที่รวมไว้ และทำให้คลาสใหม่เหล่านี้ใช้งานได้ผ่านVisual J++ Apple ไม่ได้รวม Java runtime ไว้ในOS X อีกต่อ ไปตั้งแต่เวอร์ชัน 10.7แต่ระบบจะแจ้งให้ผู้ใช้ดาวน์โหลดและติดตั้งในครั้งแรกที่เปิดใช้งานแอปพลิเคชันที่ต้องการ JRE การแจกจ่าย Linux หลายตัว รวมOpenJDK runtime เป็นเครื่องเสมือนเริ่มต้น ทำให้ไม่จำเป็นต้องดาวน์โหลด Oracle JRE ที่เป็นกรรมสิทธิ์[ 77 ]

แอปพลิเคชัน Java บางแอปพลิ เคชันมีการใช้งานบนเดสก์ท็อปอย่างแพร่หลาย รวมถึงสภาพแวดล้อมการพัฒนาแบบบูรณาการNetBeans , EclipseและJetBrains [ 78 ] และไคลเอนต์การแชร์ไฟล์ เช่นLimeWireและ Vuze นอกจากนี้ Java ยังถูกใช้ใน สภาพแวดล้อมการเขียนโปรแกรมคณิตศาสตร์ MATLABทั้งสำหรับการแสดงผลส่วนติดต่อผู้ใช้และเป็นส่วนหนึ่งของระบบหลัก Java ยังมีส่วนติดต่อผู้ใช้แบบข้ามแพลตฟอร์มสำหรับแอปพลิเคชันการทำงานร่วมกันระดับสูงบางแอปพลิเคชัน เช่นLotus Notes

Oracle วางแผนที่จะยกเลิกปลั๊กอินเบราว์เซอร์ Java ที่ติดตั้งแยกต่างหากจาก Java Runtime Environment ใน JDK 9 ก่อน จากนั้นจึงลบออกอย่างสมบูรณ์ในเวอร์ชันถัดไป บังคับให้นักพัฒนาเว็บใช้เทคโนโลยีทางเลือกอื่น[ 79 ]

มาสคอต

ดุ๊ก มาสคอตของชวา

มาสคอตของ Java มีชื่อว่า Duke [ 80 ]

เมื่อ Sun ประกาศว่าJava SEและJava MEจะถูกปล่อยออกมาภายใต้ใบอนุญาตซอฟต์แวร์เสรี ( ใบอนุญาตสาธารณะทั่วไปของ GNU ) พวกเขาก็ได้ปล่อยกราฟิก Duke ภายใต้ใบอนุญาต BSD เสรี ในเวลาเดียวกัน[ 81 ]มีการสร้างบุคลิก Duke ใหม่ทุกปี[ 82 ]ตัวอย่างเช่น ในเดือนกรกฎาคม 2011 "Future Tech Duke" มีจมูกที่ใหญ่ขึ้น เจ็ตแพ็ค และปีกสีฟ้า[ 83 ]

การออกใบอนุญาต

ซอร์สโค้ดสำหรับการใช้งาน Java ของ Sun (เช่น การใช้งานอ้างอิงโดยพฤตินัย) มีให้ใช้งานมาระยะหนึ่งแล้ว แต่จนกระทั่งเมื่อไม่นานมานี้[ 84 ]เงื่อนไขใบอนุญาตจำกัดอย่างมากในสิ่งที่สามารถทำได้โดยไม่ต้องลงนาม (และโดยทั่วไปต้องจ่ายเงิน) สัญญากับ Sun ด้วยเหตุนี้ เงื่อนไขเหล่านี้จึงไม่ตรงตามข้อกำหนดของOpen Source InitiativeหรือFree Software Foundationที่จะถือว่าเป็นซอฟต์แวร์โอเพนซอร์สหรือซอฟต์แวร์เสรี และด้วยเหตุนี้ Sun Java จึงเป็นแพลตฟอร์มที่เป็นกรรมสิทธิ์[ 85 ]

แม้ว่าจะมีโครงการจากผู้พัฒนาภายนอกหลายโครงการ (เช่นGNU ClasspathและApache Harmony ) ที่สร้างซอฟต์แวร์ฟรีที่ใช้งานได้กับ Java บางส่วน แต่ขนาดที่ใหญ่ของไลบรารีของ Sun ประกอบกับการใช้วิธีการแบบคลีนรูม (clean room ) ทำให้การใช้งานไลบรารี Java ของพวกเขา (คอมไพเลอร์และ VM มีขนาดเล็กและกำหนดไว้อย่างดี) นั้นไม่สมบูรณ์และไม่เข้ากันได้อย่างเต็มที่ นอกจากนี้ การใช้งานเหล่านี้มักจะมีประสิทธิภาพต่ำกว่าของ Sun มาก

ซอฟต์แวร์ฟรี

โจนาธาน ไอ. ชวาร์ตซ์

Sunประกาศในงาน JavaOne 2006 ว่า Java จะกลายเป็น ซอฟต์แวร์ โอเพนซอร์สและฟรี[ 86 ]และในวันที่ 25 ตุลาคม 2006 ในงานประชุม Oracle OpenWorld Jonathan I. Schwartzกล่าวว่าบริษัทเตรียมที่จะประกาศเปิดตัวแพลตฟอร์ม Java หลัก เป็นซอฟต์แวร์โอเพนซอร์สและฟรีภายใน 30 ถึง 60 วัน[ 87 ]

Sun ได้ปล่อย Java HotSpot virtual machine และ compiler ออกมาเป็นซอฟต์แวร์ฟรีภายใต้GNU General Public Licenseเมื่อวันที่ 13 พฤศจิกายน 2549 โดยให้คำมั่นสัญญาว่าส่วนที่เหลือของ JDK (ซึ่งรวมถึง JRE) จะอยู่ภายใต้ GPL ภายในเดือนมีนาคม 2550 (“ยกเว้นส่วนประกอบบางส่วนที่ Sun ไม่มีสิทธิ์เผยแพร่ในรูปแบบซอร์สโค้ดที่สามารถแจกจ่ายได้ภายใต้ GPL”) [ 88 ]ตามที่Richard Stallman กล่าวไว้ นี่จะหมายถึงการสิ้นสุดของ “กับดัก Java” [ 89 ] Mark Shuttleworthเรียกการประกาศข่าวครั้งแรกว่า “เป็นก้าวสำคัญอย่างแท้จริงสำหรับ ชุมชน ซอฟต์แวร์ฟรี[ 90 ]

Sun ได้เผยแพร่ซอร์สโค้ดของไลบรารีคลาสภายใต้GPLเมื่อวันที่ 8 พฤษภาคม 2550 ยกเว้นบางส่วนที่จำกัดซึ่งได้รับอนุญาตจาก Sun จากบุคคลที่สามที่ไม่ต้องการให้โค้ดของตนถูกเผยแพร่ภายใต้ใบอนุญาตซอฟต์แวร์เสรีและโอเพนซอร์ส[ 91 ]บางส่วนที่ถูกจำกัดนั้นกลับกลายเป็นส่วนสำคัญของแพลตฟอร์ม เช่น การเรนเดอร์ฟอนต์และการสร้างภาพแรสเตอร์ 2 มิติ แต่ส่วนเหล่านี้ได้รับการเผยแพร่เป็นโอเพนซอร์สในภายหลังโดย Sun (ดูไลบรารีคลาส OpenJDK )

เป้าหมายของ Sun คือการแทนที่ส่วนที่ยังคงเป็นกรรมสิทธิ์และปิดแหล่งที่มาด้วยการใช้งานทางเลือกอื่น และทำให้ไลบรารีคลาสเป็นอิสระและเปิดแหล่งที่มาอย่างสมบูรณ์ ในขณะเดียวกัน โครงการของบุคคลที่สามที่ชื่อIcedTeaได้สร้าง JDK ที่เป็นอิสระและใช้งานได้สูงโดยการแทนที่โค้ดที่ยุ่งยากด้วย stubs หรือโค้ดจากGNU Classpathอย่างไรก็ตาม OpenJDK สามารถสร้างได้โดยไม่ต้องใช้ส่วนที่ยุ่งยาก (ตั้งแต่ OpenJDK 6 b10 [ 92 ] ) และได้กลายเป็นสภาพแวดล้อมรันไทม์เริ่มต้นสำหรับระบบปฏิบัติการ Linux ส่วนใหญ่[ 93 ] [ 94 ] [ 95 ] [ 96 ]

ในเดือนมิถุนายน พ.ศ. 2551 มีการประกาศว่าIcedTea 6 (ซึ่งเป็นเวอร์ชันบรรจุภัณฑ์ของ OpenJDK บนFedora 9 ) ผ่าน การทดสอบ Technology Compatibility Kitและสามารถอ้างได้ว่าเป็นการใช้งาน Java 6 ที่เข้ากันได้อย่างสมบูรณ์[ 97 ]

เนื่องจาก OpenJDK อยู่ภายใต้ GPL จึงสามารถแจกจ่าย JRE เวอร์ชันที่กำหนดเองได้โดยตรงกับแอปพลิเคชันซอฟต์แวร์[ 98 ] [ 99 ]แทนที่จะกำหนดให้ผู้ใช้ปลายทาง (หรือผู้ดูแลระบบ) ดาวน์โหลดและติดตั้ง JRE เวอร์ชันที่เป็นกรรมสิทธิ์ของ Oracle ที่ถูกต้องลงในระบบของตนเอง

การวิจารณ์

ในกรณีส่วนใหญ่ การสนับสนุน Java ไม่จำเป็นในเว็บเบราว์เซอร์ และผู้เชี่ยวชาญด้านความปลอดภัยแนะนำว่าไม่ควรใช้งานในเบราว์เซอร์เว้นแต่จำเป็นอย่างยิ่ง[ 100 ]มีการแนะนำว่า หากเว็บไซต์บางแห่งต้องการ Java ผู้ใช้ควรติดตั้งเบราว์เซอร์แยกต่างหากสำหรับเว็บไซต์เหล่านั้นโดยเฉพาะ

ยาสามัญ

เมื่อ มีการเพิ่ม เจเนริกส์ลงใน Java 5.0 ก็มีเฟรมเวิร์กของคลาสจำนวนมากอยู่แล้ว (ซึ่งหลายคลาสก็ถูกยกเลิกการใช้ งานไปแล้ว ) ดังนั้นจึงเลือกที่จะใช้การลบ (erasure) ในการใช้งานเจเนริก ส์ เพื่อให้สามารถใช้งานร่วมกับการย้ายระบบและนำคลาสที่มีอยู่เหล่านี้กลับมาใช้ใหม่ได้ ซึ่งทำให้คุณสมบัติที่สามารถนำเสนอได้นั้นมีจำกัดเมื่อเทียบกับภาษาอื่นๆ[ 101 ] [ 102 ]การเพิ่มไวด์การ์ดประเภททำให้ Java ไม่สมบูรณ์[ 103 ]

ประเภทจำนวนเต็มที่ไม่มีเครื่องหมาย

Java ขาด ชนิด ข้อมูลจำนวนเต็มที่ไม่มีเครื่องหมาย (unsigned integer ) ข้อมูลที่ไม่มีเครื่องหมายมักถูกสร้างขึ้นจากโปรแกรมที่เขียนด้วยภาษาCและการขาดชนิดข้อมูลเหล่านี้ทำให้ไม่สามารถแลกเปลี่ยนข้อมูลโดยตรงระหว่าง C และ Java ได้ นอกจากนี้ ตัวเลขขนาดใหญ่ที่ไม่มีเครื่องหมายยังถูกใช้ในหลายสาขาการประมวลผลตัวเลข รวมถึงการเข้ารหัสลับ ซึ่งอาจทำให้การใช้ Java สำหรับงานเหล่านี้ไม่สะดวก[ 104 ] แม้ว่าจะสามารถหลีกเลี่ยงปัญหานี้ได้บางส่วนด้วยโค้ดการแปลงและการใช้ชนิดข้อมูลที่ใหญ่กว่า แต่ก็ทำให้การใช้ Java ในการจัดการข้อมูลที่ไม่มีเครื่องหมายยุ่งยาก ในขณะที่จำนวนเต็มที่มีเครื่องหมาย 32 บิตอาจใช้เพื่อเก็บค่าที่ไม่มีเครื่องหมาย 16 บิตได้อย่างง่ายดาย แต่ค่าที่ไม่มีเครื่องหมาย 32 บิตจะต้องใช้จำนวนเต็มที่มีเครื่องหมาย 64 บิต ยิ่งไปกว่านั้น ค่าที่ไม่มีเครื่องหมาย 64 บิตไม่สามารถจัดเก็บได้โดยใช้ชนิดข้อมูลจำนวนเต็มใด ๆ ใน Java เนื่องจากไม่มีชนิดข้อมูลที่ใหญ่กว่า 64 บิตในภาษา Java หากมีการใช้ฟังก์ชัน การเรียกใช้ฟังก์ชันจะกลายเป็นสิ่งจำเป็นสำหรับการดำเนินการหลายอย่างซึ่งเป็นลักษณะเฉพาะของภาษาอื่น ๆ อีกทางเลือกหนึ่งคือ สามารถใช้จำนวนเต็มที่มีเครื่องหมายของ Java เพื่อจำลองจำนวนเต็มที่ไม่มีเครื่องหมายที่มีขนาดเท่ากันได้ แต่ต้องใช้ความรู้โดยละเอียดเกี่ยวกับการดำเนินการบิตที่ซับซ้อน[ 105 ]

เลขคณิตจุดลอยตัว

การคำนวณเลขทศนิยมของ Java ส่วนใหญ่ใช้ มาตรฐาน IEEE 754 ( มาตรฐานสำหรับการคำนวณเลขทศนิยมแบบไบนารี ) แต่คุณสมบัติบางอย่างไม่ได้รับการสนับสนุนแม้จะใช้strictfpตัวดัดแปลง เช่น แฟล็กข้อยกเว้นและการปัดเศษแบบกำหนดทิศทาง ซึ่งเป็นคุณสมบัติที่กำหนดโดยมาตรฐาน IEEE 754 นอกจากนี้ ประเภทเลขทศนิยมความแม่นยำสูงที่อนุญาตใน 754 และมีอยู่ในโปรเซสเซอร์หลายตัวก็ไม่ได้รับอนุญาตใน Java [ 106 ] [ 107 ]

ผลงาน

ในช่วงแรกๆ ของ Java (ก่อนที่HotSpot VMจะถูกนำมาใช้ใน Java 1.3 ในปี 2000) มีการวิพากษ์วิจารณ์เรื่องประสิทธิภาพอยู่บ้าง โดยทั่วไปแล้วการทดสอบประสิทธิภาพจะรายงานว่า Java ช้ากว่า C (ซึ่งเป็นภาษาที่คอมไพล์เป็นโค้ดเนทีฟ) ประมาณ 50% [ 108 ] [ 109 ] [ 110 ]

ประสิทธิภาพของ Javaได้รับการปรับปรุงอย่างมากตั้งแต่เวอร์ชันแรกๆ[ 23 ]ประสิทธิภาพของคอมไพเลอร์ JITเมื่อเทียบกับคอมไพเลอร์เนทีฟนั้น ในการทดสอบที่ปรับให้เหมาะสมบางกรณี พบว่าค่อนข้างคล้ายคลึงกัน[ 23 ] [ 24 ] [ 25 ]

ไบต์โค้ดของ Javaสามารถถูกตีความโดยเครื่องเสมือน (Virtual Machine หรือ JVM) ในขณะรันไทม์ หรือสามารถถูกคอมไพล์เป็นโค้ดเนทีฟในขณะโหลดหรือขณะรันไทม์ ซึ่งทำงานโดยตรงบนฮาร์ดแวร์ของคอมพิวเตอร์ การตีความนั้นช้ากว่าการทำงานแบบเนทีฟ และการคอมไพล์ในขณะโหลดหรือขณะรันไทม์จะมีผลเสียต่อประสิทธิภาพในช่วงเริ่มต้นของการคอมไพล์ JVM ที่มีประสิทธิภาพสูงในปัจจุบันทั้งหมดใช้แนวทางการคอมไพล์ ดังนั้นหลังจากเวลาเริ่มต้นการทำงานแล้ว ประสิทธิภาพจะเทียบเท่ากับโค้ดเนทีฟ

ความปลอดภัย

แพลตฟอร์ม Java มีสถาปัตยกรรมความปลอดภัย[ 111 ]ซึ่งออกแบบมาเพื่ออนุญาตให้ผู้ใช้รันไบต์โค้ดที่ไม่น่าเชื่อถือในลักษณะ "แซนด์บ็อกซ์" เพื่อป้องกันซอฟต์แวร์ที่เป็นอันตรายหรือเขียนไม่ดี คุณสมบัติ "แซนด์บ็อกซ์" นี้มีจุดประสงค์เพื่อปกป้องผู้ใช้โดยจำกัดการเข้าถึงคุณสมบัติและ API ของแพลตฟอร์มบางอย่างที่อาจถูกมัลแวร์ ใช้ประโยชน์ เช่น การเข้าถึงระบบไฟล์ในเครื่อง การรันคำสั่งตามอำเภอใจ หรือการเข้าถึงเครือข่ายการสื่อสาร

ในช่วงไม่กี่ปีที่ผ่านมา นักวิจัยได้ค้นพบช่องโหว่ด้านความปลอดภัยจำนวนมากใน Java เวอร์ชันที่ใช้กันอย่างแพร่หลายบางเวอร์ชัน รวมถึงเวอร์ชันของ Oracle ซึ่งอนุญาตให้โค้ดที่ไม่น่าเชื่อถือสามารถหลีกเลี่ยงกลไกแซนด์บ็อกซ์ ทำให้ผู้ใช้เสี่ยงต่อการโจมตีจากผู้ไม่ประสงค์ดี ช่องโหว่เหล่านี้ส่งผลกระทบเฉพาะแอปพลิเคชัน Java ที่เรียกใช้ไบต์โค้ดที่ไม่น่าเชื่อถือ เช่น ปลั๊กอินของเว็บเบราว์เซอร์ที่เรียกใช้แอปเพล็ต Java ที่ดาวน์โหลดจากเว็บไซต์สาธารณะ แอปพลิเคชันที่ผู้ใช้เชื่อถือและควบคุมโค้ดทั้งหมดที่กำลังทำงานอยู่นั้นจะไม่ได้รับผลกระทบ

เมื่อวันที่ 31 สิงหาคม พ.ศ. 2555 พบว่า Java 6 และ 7 (ซึ่งได้รับการสนับสนุนในขณะนั้น) บน Microsoft Windows, OS Xและ Linux มีช่องโหว่ด้านความปลอดภัยร้ายแรงที่อนุญาต ให้มี การโจมตีจากระยะไกลได้โดยการโหลดเว็บเพจที่เป็นอันตราย[ 112 ] ต่อมาพบว่าJava 5 ก็มีช่องโหว่เช่นกัน [ 113 ]

เมื่อวันที่ 10 มกราคม 2556 ผู้เชี่ยวชาญด้านคอมพิวเตอร์สามคนได้ออกมาพูดต่อต้าน Java โดยบอกกับReutersว่า Java ไม่ปลอดภัยและผู้คนควรปิดใช้งาน Java Jaime Blasco ผู้จัดการห้องปฏิบัติการของ AlienVault Labs กล่าวว่า "Java ยุ่งเหยิง มันไม่ปลอดภัย คุณต้องปิดใช้งานมัน" [ 114 ] ช่องโหว่นี้ส่งผลกระทบต่อJava 7และยังไม่ชัดเจนว่าส่งผลกระทบต่อJava 6หรือไม่ ดังนั้นจึงแนะนำให้ผู้บริโภคปิดใช้งาน[ 115 ] [ 116 ]การแจ้งเตือนด้านความปลอดภัยจาก Oracle ประกาศกำหนดการของแพตช์ที่สำคัญที่เกี่ยวข้องกับความปลอดภัยสำหรับ Java [ 117 ]

เมื่อวันที่ 14 มกราคม 2556 ผู้เชี่ยวชาญด้านความปลอดภัยกล่าวว่าการอัปเดตยังคงไม่สามารถปกป้องพีซีจากการโจมตีได้[ 118 ] ช่องโหว่นี้กระตุ้นให้ กระทรวงความมั่นคงแห่งมาตุภูมิของสหรัฐอเมริกาตอบสนองโดยสนับสนุนให้ผู้ใช้ปิดใช้งานหรือถอนการติดตั้ง Java [ 14 ] Apple ได้ขึ้นบัญชีดำ Java ในวงจำกัดสำหรับคอมพิวเตอร์ทุกเครื่องที่ใช้ ระบบปฏิบัติการ OS Xผ่านโปรแกรมป้องกันไวรัส[ 119 ]

ในปี 2014 และเพื่อตอบสนองต่อปัญหาด้านความปลอดภัยและช่องโหว่ของ Java ที่เพิ่งเกิดขึ้น บล็อกเกอร์ด้านความปลอดภัยBrian Krebsได้เรียกร้องให้ผู้ใช้ลบปลั๊กอินเบราว์เซอร์ Java อย่างน้อยที่สุด และรวมถึงซอฟต์แวร์ทั้งหมดด้วย “ผมหวังว่าโลกจะปราศจากปลั๊กอิน Java (และไม่ต้องเตือนผู้อ่านเกี่ยวกับการอัปเดตแพตช์รายไตรมาส) แต่คงต้องใช้เวลาหลายปีกว่าที่ปลั๊กอินเวอร์ชันต่างๆ นี้จะถูกลบออกจากระบบของผู้ใช้ทั่วโลก” [ 120 ] “ครั้งหนึ่งเคยมีอนาคตที่สดใส แต่ตอนนี้มันหมดประโยชน์ในเบราว์เซอร์แล้ว และกลายเป็นฝันร้ายที่สร้างความพึงพอใจให้กับอาชญากรไซเบอร์โดยแลกกับความเสียหายของผู้ใช้คอมพิวเตอร์” [ 121 ] “ผมคิดว่าทุกคนควรลบ Java ออกจากพีซีและ Mac ทั้งหมด แล้วค่อยคิดอย่างรอบคอบว่าจำเป็นต้องติดตั้งกลับเข้าไปใหม่หรือไม่ ถ้าคุณเป็นผู้ใช้ตามบ้านทั่วไป คุณอาจจะไม่จำเป็นต้องใช้มัน แต่ถ้าคุณเป็นผู้ใช้ทางธุรกิจ คุณอาจไม่มีทางเลือก” [ 122 ]

แอดแวร์

สภาพแวดล้อมรันไทม์ Java ที่แจกจ่ายโดย Oracle มีประวัติการรวมซอฟต์แวร์สปอนเซอร์ที่จะติดตั้งโดยค่าเริ่มต้นระหว่างการติดตั้งและระหว่างการอัปเดตซึ่งจะเปิดตัวทุกเดือนหรือประมาณนั้น ซึ่งรวมถึง "แถบเครื่องมือ Ask.com " ที่จะเปลี่ยนเส้นทางการค้นหาของเบราว์เซอร์ไปยังโฆษณาและ "McAfee Security Scan Plus" [ 123 ]ข้อเสนอเหล่านี้สามารถบล็อกได้ผ่านการตั้งค่าในแผงควบคุม Java แม้ว่าจะไม่ชัดเจนก็ตาม การตั้งค่านี้อยู่ภายใต้แท็บ "ขั้นสูง" ในแผงควบคุม Java ภายใต้หัวข้อ "เบ็ดเตล็ด" ซึ่งตัวเลือกนี้มีชื่อว่าตัวเลือกในการระงับ "ข้อเสนอสปอนเซอร์"

ระบบอัปเดต

Java ยังไม่ได้ปล่อยตัวอัปเดตอัตโนมัติที่ไม่ต้องอาศัยการแทรกแซงจากผู้ใช้และสิทธิ์ผู้ดูแลระบบ[ 124 ]ซึ่งแตกต่างจาก Google Chrome [ 125 ]และ Flash player [ 126 ]

ดูเพิ่มเติม

  • "ที่มาของข้อกำหนด JVM" . infoq.com . – การนำเสนอโดยเจมส์ กอสลิงเกี่ยวกับต้นกำเนิดของภาษาจาวา จากการประชุมสุดยอดภาษา JVM ปี 2008
  • บริการพัฒนาโปรแกรมด้วยภาษา Java ”. sagipl.com. – ข้อมูลเกี่ยวกับบริการพัฒนาซอฟต์แวร์ เว็บ และแอปพลิเคชันระดับองค์กรด้วยภาษา Java แบบกำหนดเอง
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Java_(software_platform)&oldid=1357871736 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ Java (แพลตฟอร์มซอฟต์แวร์)

Java คือชุด ซอฟต์แวร์คอมพิวเตอร์ และข้อกำหนดต่างๆ ที่เป็น แพลตฟอร์มซอฟต์แวร์ สำหรับการพัฒนา แอปพลิเคชันซอฟต์แวร์ และใช้งานใน สภาพแวดล้อมการประมวลผล แบบข้ามแพลตฟอร์ม Java ถูกใช้ใน...

เวอร์ชั่นล่าสุด

เวอร์ชันล่าสุดคือ Java 26 ซึ่งวางจำหน่ายในเดือนมีนาคม 2026

แพลตฟอร์ม

แพลตฟอร์ม Java คือชุดโปรแกรมที่ช่วยอำนวยความสะดวกในการพัฒนาและเรียกใช้โปรแกรมที่เขียนด้วย ภาษาโปรแกรม Java แพลตฟอร์ม Java ประกอบด้วยเอนจินการประมวลผล (เรียกว่า เครื่องเสมือน ) คอมไพเลอร์ และชุด ไลบรารี นอกจากนี้อาจมี เซิร์ฟเวอร์...

โดเมนแอปพลิเคชัน

แพลตฟอร์มต่างๆ มุ่งเป้าไปที่อุปกรณ์และ แอปพลิเคชัน ประเภทต่างๆ กัน: