Java เป็นภาษาอิสระของแพลตฟอร์มอย่างไร
โปรแกรมคอมพิวเตอร์มีความเกี่ยวข้องอย่างใกล้ชิดกับฮาร์ดแวร์และระบบปฏิบัติการเฉพาะ ตัวอย่างเช่น แอปพลิเคชัน Windows ไม่สามารถทำงานบนระบบปฏิบัติการ Mac แอปพลิเคชัน Mac ไม่สามารถทำงานบนระบบปฏิบัติการ Android เป็นต้น
แอปพลิเคชันบางตัวมีอยู่ในระบบปฏิบัติการทั้งหมด เช่น MS Word ดังนั้นควรเขียนแยกต่างหากสำหรับระบบปฏิบัติการทั้งหมดหรือไม่
เพื่อรับมือกับความหลากหลายของแพลตฟอร์ม แอปพลิเคชันดังกล่าวควรเขียนแยกกันสำหรับทุกแพลตฟอร์ม Java จัดเตรียมวิธีการเขียนแอปพลิเคชันโดยไม่ขึ้นกับฮาร์ดแวร์และระบบปฏิบัติการ ดังนั้นจึงเรียกว่าภาษาโปรแกรมที่ไม่ขึ้นกับแพลตฟอร์ม
ความหมายของไม่ขึ้นกับแพลตฟอร์มคือโค้ดที่คอมไพล์ด้วยจาวา (โค้ดไบต์) สามารถทำงานบนระบบปฏิบัติการทั้งหมด
โปรแกรมเขียนด้วยภาษาที่มนุษย์อ่านได้ อาจมีคำ วลี ฯลฯ ที่เครื่องไม่เข้าใจ สำหรับซอร์สโค้ดที่เครื่องจะเข้าใจได้นั้น จะต้องเป็นภาษาที่เครื่องเข้าใจ ซึ่งโดยปกติจะเป็นภาษาระดับเครื่อง ดังนั้นนี่คือบทบาทของคอมไพเลอร์ คอมไพเลอร์จะแปลงภาษาระดับสูง (ภาษามนุษย์) ให้เป็นรูปแบบที่เครื่องเข้าใจ ดังนั้น คอมไพเลอร์คือโปรแกรมที่แปลซอร์สโค้ดสำหรับโปรแกรมอื่นจากภาษาโปรแกรมเป็นโค้ดปฏิบัติการ
รหัสปฏิบัติการนี้อาจเป็นลำดับของคำสั่งเครื่องที่สามารถดำเนินการโดย CPU ได้โดยตรง หรืออาจเป็นการเป็นตัวแทนระดับกลางที่ตีความโดยเครื่องเสมือน การเป็นตัวแทนระดับกลางใน Java คือรหัส Java Byte
· แพลตฟอร์มคืออะไร และภาษาที่ไม่ขึ้นกับแพลตฟอร์มคืออะไร
· การคอมไพล์โค้ด
· โปรแกรมทำงานอย่างไรใน JAVA?
· JVM (Java Virtual Machine)
· การคอมไพล์และการตีความมีบทบาทอย่างไรในแพลตฟอร์มที่ไม่ขึ้นต่อกัน
· Java ให้อิสระกับแพลตฟอร์มอย่างไร
· เหตุใด Java จึงไม่ขึ้นกับแพลตฟอร์มโดยสมบูรณ์
· สรุป
แพลตฟอร์มคืออะไร และภาษาที่ไม่ขึ้นกับแพลตฟอร์มคืออะไร
แพลตฟอร์มสามารถกำหนดได้ว่าเป็นการผสมผสานระหว่างฮาร์ดแวร์ ระบบปฏิบัติการ และซอฟต์แวร์ที่แตกต่างกันซึ่งมีสภาพแวดล้อมในการรันโปรแกรม
ความเป็นอิสระของแพลตฟอร์มหมายถึงความเป็นอิสระของโปรแกรมจากระบบปฏิบัติการของระบบ ใช้ระเบียบวิธี “Write Once Run Anywhere (WORA)”
การรวบรวมรหัส
ทุกครั้งที่เราเขียนโค้ด เราปฏิบัติตามไวยากรณ์ของภาษาโปรแกรม ซึ่งโดยทั่วไปสามารถอ่านได้ มีคำ ชื่อตัวแปร วลี ชื่อเมธอด ฯลฯ รวมอยู่ด้วย ล้วนถือเป็นวรรณคดีที่มนุษย์สามารถอ่านเข้าใจได้
เป็นผลให้คอมพิวเตอร์เรียกใช้คอมไพเลอร์เพื่อเปลี่ยนซอร์สโค้ดเป็นโค้ดที่เครื่องอ่านได้ หรือที่เรียกว่าภาษาระดับเครื่อง คอมไพเลอร์สร้างรหัสระดับเครื่องในรูปแบบเฉพาะเพื่อให้ CPU สามารถเข้าใจและดำเนินการได้โดยง่ายโดยไม่มีข้อผิดพลาด
เว้นแต่ว่าคอมพิวเตอร์ทั้งสองเครื่องจะทำงานบนระบบปฏิบัติการเดียวกัน เราจะไม่สามารถเรียกใช้โค้ดที่พัฒนาขึ้นบนเครื่องหนึ่งไปยังอีกเครื่องหนึ่งได้ เมื่อภาษาระดับเครื่องแตกต่างกันไปตามแต่ละระบบปฏิบัติการ นักพัฒนาและโปรแกรมเมอร์หลายคนคิดว่านี่เป็นสิ่งที่ยอมรับไม่ได้ อย่างไรก็ตาม Java ทำให้สิ่งต่าง ๆ ง่ายขึ้นและมีการแก้ไขสำหรับสิ่งนี้
โปรแกรมทำงานอย่างไรใน JAVA?
ใน Java คอมไพเลอร์จะแปลงโปรแกรมเป็น bytecode ซึ่งไม่ใช่โค้ดที่เรียกใช้งานได้ จากนั้น JVM (Java Virtual Machine) รันโค้ดไบต์ที่รันไทม์ ซอร์สโค้ด Java ถูกคอมไพล์เป็น bytecode เมื่อเราใช้คอมไพเลอร์javac
โค้ดไบต์ที่เป็นผลลัพธ์ไม่สามารถสั่งการด้วยเครื่องได้ และแพลตฟอร์มหรือระบบปฏิบัติการอื่นใดอาจเรียกใช้ได้ แต่ต้องใช้ล่ามเพื่อทำงานบนคอมพิวเตอร์ เมื่อเราเรียกใช้โปรแกรมหรือไฟล์ เราจะได้ ไฟล์ .classซึ่งเป็นไฟล์ที่ไม่สามารถเรียกใช้งานได้ JVM ทำหน้าที่เป็นตัวแปลนี้ และเป็นผลให้รัน Bytecode JVM นั้นไม่ขึ้นกับแพลตฟอร์มอย่างไม่ต้องสงสัย คล้ายกับว่าแปรเปลี่ยนไปตามสิ่งรอบข้าง ตัวอย่างเช่น MAC และ Linux มี JVM ที่แตกต่างจาก Windows รองรับการพกพาได้ซึ่งเป็นหนึ่งในคุณสมบัติหลักเนื่องจากรหัสแบบพกพาของรหัสทำให้ไม่ขึ้นกับแพลตฟอร์ม
รหัสไบต์ได้รับการบันทึกไว้ในดิสก์ด้วยนามสกุลไฟล์. class เมื่อรันโปรแกรม รหัสไบต์จะถูกแปลง โดยใช้คอมไพเลอร์แบบjust-in-time ( JIT ) ผลลัพธ์คือรหัสเครื่องซึ่งป้อนไปยังหน่วยความจำและดำเนินการ
ต้องคอมไพล์โค้ด Java สองครั้งจึงจะดำเนินการได้:
- ต้องคอมไพล์โปรแกรม Java เป็น bytecode
- เมื่อรัน bytecode จะต้องแปลงเป็นรหัสเครื่อง
คอมไพลเลอร์สร้างไฟล์ OS-dependent.exe เมื่อใช้ C หรือ C++ (ภาษาเหล่านี้ไม่ขึ้นกับแพลตฟอร์ม) ไฟล์ this.exe จะไม่ทำงานเมื่อเราพยายามเรียกใช้บนระบบปฏิบัติการอื่น เนื่องจากขึ้นอยู่กับระบบปฏิบัติการนั้นและเข้ากันไม่ได้
JVM (จาวา เวอร์ชวล แมชชีน)
JVM ซึ่งเป็นคอมโพเนนต์ของคอมไพเลอร์ Java แปลงไฟล์ .java เป็นไฟล์ .class ฟังก์ชันหลักในซอร์สโค้ดเรียกว่า JVM เมื่อเราคอมไพล์ Java Code
JVM (Java Virtual Machine) ทำหน้าที่เป็นกลไกรันไทม์เพื่อเรียกใช้แอปพลิเคชัน Java JVM เป็นตัวที่เรียกใช้ เมธอด หลักที่มีอยู่ในโค้ดจาวา JVM เป็นส่วนหนึ่งของ JRE (Java Runtime Environment)
แอปพลิเคชัน Java เรียกว่า WORA (เขียนครั้งเดียวเรียกใช้ได้ทุกที่) ซึ่งหมายความว่าโปรแกรมเมอร์สามารถพัฒนาโค้ด Java บนระบบหนึ่งและสามารถคาดหวังให้รันบนระบบอื่นที่เปิดใช้งาน Java ได้โดยไม่ต้องปรับแต่งใดๆ ทั้งหมดนี้เป็นไปได้เพราะ JVM
เมื่อเราคอมไพล์ไฟล์.java ไฟล์ .class (ประกอบด้วยรหัสไบต์) ที่มีชื่อคลาสเดียวกันใน ไฟล์ .javaจะถูกสร้างขึ้นโดยคอมไพเลอร์ Java ไฟล์ .classนี้เข้าสู่ขั้นตอนต่างๆเมื่อเราเรียกใช้งาน ขั้นตอนเหล่านี้ร่วมกันอธิบาย JVM ทั้งหมด
ใน Java ประเด็นหลักคือ JVM ขึ้นอยู่กับระบบปฏิบัติการ ดังนั้นหากคุณใช้ Mac OS X คุณจะมี JVM ที่แตกต่างจากที่คุณใช้ Windows หรือระบบปฏิบัติการอื่น ข้อเท็จจริงนี้สามารถตรวจสอบได้โดยการพยายามดาวน์โหลด JVM สำหรับเครื่องเฉพาะของคุณ — เมื่อพยายามดาวน์โหลด คุณจะได้รับรายการ JVM ที่สอดคล้องกับระบบปฏิบัติการที่แตกต่างกัน และคุณจะเลือก JVM ใดก็ได้ที่เป็นเป้าหมายสำหรับระบบปฏิบัติการนั้น คุณกำลังวิ่ง. ดังนั้นเราจึงสามารถสรุปได้ว่า JVM นั้นขึ้นอยู่กับแพลตฟอร์ม และเป็นเหตุผลว่าทำไม Java จึงสามารถเป็น "แพลตฟอร์มที่ไม่ขึ้นกับแพลตฟอร์ม"
จุดสำคัญ:
- ในกรณีของ Java มันเป็นความมหัศจรรย์ของ Bytecode ที่ทำให้มันเป็นอิสระจากแพลตฟอร์ม
- สิ่งนี้จะเพิ่มคุณสมบัติที่สำคัญในภาษา JAVA ที่เรียกว่าความสามารถในการพกพา ทุกระบบมี JVM ของตัวเองซึ่งจะติดตั้งโดยอัตโนมัติเมื่อติดตั้งซอฟต์แวร์ jdk สำหรับทุกระบบปฏิบัติการ มี JVM แยกต่างหากซึ่งสามารถอ่านไฟล์ .class หรือรหัสไบต์ได้
- ประเด็นสำคัญที่ต้องสังเกตคือ แม้ว่าJAVA เป็นภาษาที่ไม่ขึ้นกับแพลตฟอร์ม แต่ JVM นั้นขึ้นอยู่กับแพลตฟอร์ม JVM ที่แตกต่างกันได้รับการออกแบบมาสำหรับระบบปฏิบัติการที่แตกต่างกัน และรหัสไบต์สามารถทำงานบนระบบปฏิบัติการที่แตกต่างกันได้
เพื่อให้บรรลุความเป็นอิสระของแพลตฟอร์ม จึงผสมผสานทั้งการรวบรวมและการตีความเข้าด้วยกัน เมื่อโปรแกรมถูกคอมไพล์เป็น Java โปรแกรมจะเปลี่ยนเป็น bytecode ซึ่งมักเรียกว่าไฟล์ a.class แทนที่จะเป็นรหัสเครื่อง ตอนนี้ bytecode นี้เป็นสิ่งที่ทำให้แตกต่างจากรหัสเครื่องด้วยคุณสมบัติของมัน เนื่องจากสามารถย้ายไปยัง/พกพาไปยังแพลตฟอร์มอื่นได้ แต่ Java ไม่สามารถทำได้ รหัสไบต์นั้นอาจถูกเรียกใช้งานบน Java Virtual Machine
Java ให้ความเป็นอิสระของแพลตฟอร์มอย่างไร
ในภาษาการเขียนโปรแกรมส่วนใหญ่ คอมไพเลอร์ (หรือล่าม) จะสร้างโค้ดที่สามารถดำเนินการบนเครื่องเป้าหมาย เฉพาะได้ ตัวอย่างเช่น หากคุณคอมไพล์โปรแกรม C++ บนเครื่อง Windows ไฟล์ปฏิบัติการสามารถคัดลอกไปยังเครื่องอื่นได้ แต่จะรันบนเครื่อง Windows เครื่องอื่นเท่านั้น แต่จะไม่ทำงานบนเครื่องอื่น (เช่น เครื่อง Mac หรือเครื่อง Linux) แพลตฟอร์มถูกกำหนดโดยเครื่องเป้าหมาย (พร้อมกับระบบปฏิบัติการ) สำหรับภาษาก่อนหน้านี้ ผู้ออกแบบภาษาจำเป็นต้องสร้างเวอร์ชันพิเศษของคอมไพเลอร์ (หรือตัวแปล) สำหรับทุกแพลตฟอร์ม หากคุณเขียนโปรแกรมที่คุณต้องการให้ใช้งานได้บนหลายแพลตฟอร์ม คุณในฐานะโปรแกรมเมอร์จะต้องทำงานเพิ่มเติมอีกเล็กน้อย คุณจะต้องสร้างซอร์สโค้ดหลายเวอร์ชันสำหรับแต่ละแพลตฟอร์ม
Java ประสบความสำเร็จในการขจัดปัญหาแพลตฟอร์มสำหรับโปรแกรมเมอร์ระดับสูง (เช่นคุณ) เนื่องจากได้จัดลำดับการคอมไพล์-ลิงก์-ดำเนินการใหม่ในระดับพื้นฐานของคอมไพเลอร์ รายละเอียดมีความซับซ้อน แต่โดยพื้นฐานแล้ว ผู้ออกแบบภาษา Java แยกปัญหาการเขียนโปรแกรมเหล่านั้นซึ่งขึ้นอยู่กับแพลตฟอร์มและพัฒนาวิธีการระดับต่ำเพื่ออ้างถึงประเด็นเหล่านี้ในเชิงนามธรรม ดังนั้น คอมไพเลอร์ Java จะไม่สร้างไฟล์อ็อบเจกต์ แต่จะสร้างไฟล์bytecodeซึ่งก็คือไฟล์อ็อบเจกต์สำหรับเครื่องเสมือนแทน อันที่จริงแล้ว คอมไพเลอร์ Java มักเรียกว่าคอมไพเลอร์ JVM (สำหรับ Java Virtual Machine)
ดังนั้น คุณสามารถเขียนโปรแกรม Java (บนแพลตฟอร์มใดก็ได้) และใช้คอมไพเลอร์ JVM (เรียกว่า javac) เพื่อสร้างไฟล์ bytecode (ไฟล์ bytecode ใช้นามสกุล .class) ไฟล์ bytecode นี้สามารถใช้ได้บนทุกแพลตฟอร์ม (ที่ติดตั้ง Java) อย่างไรก็ตาม bytecode ไม่ใช่ไฟล์ปฏิบัติการ ในการเรียกใช้งานไฟล์ bytecode คุณต้องเรียกใช้ตัวแปล Java (เรียกว่า java) ทุกแพลตฟอร์มมีล่าม Java ของตัวเองซึ่งจะแก้ไขปัญหาเฉพาะแพลตฟอร์มโดยอัตโนมัติซึ่งไม่สามารถยกเลิกได้อีกต่อไป เมื่อ bytecode ต้องการการดำเนินการเฉพาะแพลตฟอร์ม ตัวแปล Java จะเชื่อมโยงในรหัสที่เหมาะสมเฉพาะสำหรับแพลตฟอร์ม
เช่นเดียวกับภาษาที่แปลแล้ว เป็นไปได้ที่จะทำให้โปรแกรม Java ทำงานเร็วขึ้นโดยการคอมไพล์ bytecode ลงในไฟล์ปฏิบัติการ ข้อเสียคือไฟล์ปฏิบัติการดังกล่าวจะทำงานบนแพลตฟอร์มที่สร้างขึ้นเท่านั้น
เหตุใด Java จึงไม่ขึ้นกับแพลตฟอร์มโดยสมบูรณ์
เห็นได้ชัดว่า Java ไม่สามารถทำงานบนแพลตฟอร์มที่ไม่มี JVM ดังนั้นในความหมายที่แท้จริงของคำนี้ Java จึงไม่ขึ้นกับแพลตฟอร์ม แต่ในขณะเดียวกัน นิยามความเป็นอิสระของแพลตฟอร์มของคุณก็ไม่มีประโยชน์ ไม่มีภาษาใดที่เป็นไปได้ที่จะเป็นอิสระจากแพลตฟอร์มอย่างแท้จริง เนื่องจากบางแง่มุมของแพลตฟอร์มจะต้องสามารถแยกวิเคราะห์ภาษาได้ และด้วยแพลตฟอร์มที่เป็นไปได้ทั้งหมด บางแพลตฟอร์มจึงไม่สามารถแยกวิเคราะห์ได้
ดังนั้น จากข้อเท็จจริงที่ว่าหลาย ๆ แพลตฟอร์มรัน JVM และโค้ด Java นั้นสามารถรันบน JVM ใด ๆ ที่มีความหมายเหมือนกันได้ Java จึงขึ้นอยู่กับแพลตฟอร์ม
บทสรุป
Java เป็นหนึ่งในภาษาโปรแกรมที่มีชื่อเสียงและใช้กันอย่างแพร่หลาย เป็น ภาษาโปรแกรมที่ไม่ขึ้น กับแพลตฟอร์ม Java ไม่จำเป็นต้องเขียนโค้ดทั้งหมดใหม่สำหรับแพลตฟอร์มที่แตกต่างกันทั้งหมด รองรับความเป็นอิสระของแพลตฟอร์มโดยใช้Java bytecodeและJava Virtual Machine Java คอมไพเลอร์ javac แปลงรหัสโปรแกรมเป็นรหัสไบต์ รหัสไบต์นี้ไม่ขึ้นกับแพลตฟอร์มและสามารถทำงานบนระบบปฏิบัติการ JVM ใดก็ได้ JVM แปลรหัสไบต์เป็นรหัสเครื่อง และโปรแกรมถูกเรียกใช้งาน
ขอบคุณที่อ่าน ขอให้มีความสุขกับการเรียนรู้
สนับสนุนสิ่งพิมพ์ของเราโดยติดตาม
จะสร้างสมดุลระหว่างงานประจำและการเรียนนอกเวลาได้อย่างไร การเปิดตัวตลาด NFT ของคุณเองด้วยโซลูชันแพลตฟอร์ม NFT แบบ White-Label Java ทางเลือกและอย่างใดอย่างหนึ่ง: การจัดการค่า Null และการแสดงค่าที่เป็นไปได้สองค่า วิธีการใช้ประโยชน์สูงสุดจากชีวิตของคุณ: คำแนะนำส่วนบุคคล Callable vs Runnable vs Future ใน Java Spring 3.0 และคุณลักษณะ ส่วนใหญ่ คำถามสัมภาษณ์ตามสตรีม Java8 ที่พบบ่อย — ส่วนสุดท้าย กฎ 8 อันดับแรกจาก «The 48 Laws of Power» โดย Robert Greene: Rosemary — วิธีปลูกมันและประโยชน์อะไรของมัน




































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)