เหตุใด Java Platform จึงเป็นภาษาอิสระ

เผยแพร่แล้ว: 2021-02-08

สารบัญ

บทนำ

Java ได้รับความนิยมอย่างมากจากภาษาโปรแกรมอื่นๆ ทั้งหมดตั้งแต่กำเนิด และเหตุผลสำหรับการตอบสนองอันยิ่งใหญ่ดังกล่าวก็คือความสามารถในการมอบคุณสมบัติที่เป็นเอกลักษณ์ ไวยากรณ์ Java จะเกือบจะคล้ายกับ c ++ แต่มีคุณสมบัติที่ไกลกว่า c ++

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

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

Java มีบทบาทสำคัญในหลายโดเมน เช่น การพัฒนาแอป การพัฒนาเว็บ การสร้างเครื่องมือซอฟต์แวร์ นอกจากนี้ยังมีห้องสมุดจำนวนมากซึ่งทำให้สิ่งต่างๆ ง่ายขึ้น นอกจากนี้ ความพร้อมใช้งานของ IDE ยังมีบทบาทสำคัญในการดึงดูดความสนใจของนักพัฒนาอีกด้วย IDE เช่น Eclipse, IntelliJ, NetBeans มักถูกใช้โดยนักพัฒนาหลายคน

เอาล่ะ มาที่การสนทนาของเรากัน

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

การรวบรวมรหัส

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

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

การสร้างภาษาระดับเครื่องนี้แตกต่างกันไปตามภาษาการเขียนโปรแกรมแต่ละภาษาและระบบปฏิบัติการแต่ละระบบ ตัวอย่างเช่น c/c++ จะสร้างไฟล์ .exe ที่ไม่เหมือนกันสำหรับสองเครื่อง หากใช้งานบนระบบปฏิบัติการอื่น

และนี่คือปัญหาที่เกิดขึ้น!

เมื่อภาษาระดับเครื่องแตกต่างกันไปตามระบบปฏิบัติการแต่ละระบบ เราไม่สามารถเรียกใช้โค้ดที่คอมไพล์ในเครื่องอื่นในเครื่องใหม่ได้ เว้นแต่ว่าทั้งสองระบบทำงานบนระบบปฏิบัติการเดียวกัน นี่เป็นเรื่องไร้สาระสำหรับโปรแกรมเมอร์และนักพัฒนาหลายคน

แต่ Java ทำให้สิ่งต่างๆ ง่ายขึ้น และจาวาก็มีวิธีแก้ปัญหานี้ มาเริ่มกันเลย.

Java เป็นแพลตฟอร์มอิสระ

จะเกิดอะไรขึ้นเมื่อเราคอมไพล์โค้ดใน java?

เมื่อใดก็ตามที่เราป้อนคำสั่ง "javac filename.java" หรือคอมไพล์โค้ดใน java javac จะคอมไพล์โค้ด และสร้างโค้ดระดับกลางที่เรียกว่า Byte Code

นี่คือจุดที่จาวาสร้างความแตกต่างระหว่างภาษาโปรแกรมต่างๆ ทั้งหมด มันสร้างไฟล์ .class ซึ่งถือเป็นรหัสไบต์ ในขณะที่ภาษาเช่น c/c++ จะสร้างโค้ดที่เรียกใช้งานได้โดยกำเนิดเมื่อคอมไพล์และทำให้ขึ้นกับแพลตฟอร์ม

เดี๋ยวก่อน นี่ยังเร็วเกินไปสำหรับการเฉลิมฉลอง รหัสไบต์นี้ไม่สามารถเรียกใช้งานได้ เราต้องการนักแปลเพื่อรันโค้ดไบต์นี้ และ JVM ก็ทำหน้าที่นี้ โดยทั่วไป JVM จะอยู่ในหน่วยความจำหลักของคอมพิวเตอร์ของเรา Java Virtual Machine ทำหน้าที่เป็นล่าม จากนั้นรันโค้ดไบต์ที่สร้างโดย javac

และตอนนี้เราทำเสร็จแล้ว รหัสของเราก็ทำงานสำเร็จ

แล้ว java จะจัดการมันคนเดียวได้อย่างไร?

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

เพื่อให้เข้าใจอย่างถูกต้อง เรามาทำความเข้าใจสถาปัตยกรรมและการทำงานของ JVM กัน

สถาปัตยกรรม JVM

JVM เป็นส่วนหนึ่งของสภาพแวดล้อมรันไทม์ของ Java และมีหน้าที่ในการแปลงไฟล์ .java เป็นไฟล์ .class เมื่อเราคอมไพล์โค้ดจาวา JVM จะเรียกเมธอดหลักในซอร์สโค้ด

สถาปัตยกรรม JVM

ClassLoader

เป็นระบบย่อยในเครื่องเสมือน Java มันโหลดไฟล์ .class ตรวจสอบว่ามีข้อยกเว้นหรือไม่ และเป็นสาเหตุของข้อยกเว้นรันไทม์เพียงเล็กน้อย และหลังจากตรวจสอบแล้ว ระบบจะจัดสรรหน่วยความจำสำหรับตัวแปรและวิธีการที่มีอยู่ กำหนดค่าเริ่มต้นให้กับตัวแปรและอาร์เรย์ นอกจากนี้ยังรันเมธอดหรือตัวแปรสแตติกที่มีอยู่ในโค้ด

มีตัวโหลดคลาสในตัว 3 inJVMm, bootstrap classloader, Extension classloader, Application classloader

พื้นที่หน่วยความจำใน JVM

วิธีการ/พื้นที่คลาส

มันเก็บข้อมูลเช่นชื่อคลาส ชื่อเมธอด ตัวแปร เป็นทรัพยากรที่ใช้ร่วมกันสำหรับวิธีการและตัวแปรทั้งหมดในชั้นเรียน

กอง

มันเก็บข้อมูลของข้อมูลทั้งหมดที่จัดเก็บไว้ในพื้นที่ฮีป

กองภาษา JVM

มันเก็บข้อมูลในบล็อคที่เรียกว่า stack-frames/frames ซึ่งเก็บข้อมูลปัจจุบันเมื่อมีการเรียกใช้ฟังก์ชัน จัดเก็บตัวแปรในเครื่อง มันยังมีบทบาทสำคัญในการจัดการเธรด

ลงทะเบียนพีซี

มันเก็บที่อยู่ของคำสั่งที่กำลังดำเนินการอยู่ มีประโยชน์ในสถานการณ์การดำเนินการแบบมัลติเธรด

Native Method Stack

มันเก็บข้อมูลทั้งหมดของวิธีการดั้งเดิมที่ใช้

เครื่องมือดำเนินการ

เอ็นจิ้นการดำเนินการจะรันโค้ดไบต์ และจะลบหน่วยความจำที่จัดสรรไปยังอ็อบเจ็กต์ที่ไม่สามารถเข้าถึงได้หรือไม่มีการอ้างอิง ล่ามในเอ็นจิ้นการดำเนินการจะดำเนินการโค้ดไบต์โดยการอ่านในสตรีมและตีความทีละบรรทัด

นอกจากนี้ยังมีส่วนที่น่าตื่นเต้นที่เรียกว่า คอมไพเลอร์ JIT (Just In Time Compiler) ซึ่งจะสร้างโค้ดปฏิบัติการแบบเนทีฟสำหรับเมธอด ดังนั้นหากมีการเรียกใช้ฟังก์ชันหลายรายการ JVM ไม่จำเป็นต้องตีความมันอีก แต่ใช้โค้ดเรียกทำงานแบบเนทีฟโดยตรง ดังนั้นจึงช่วยปรับปรุงประสิทธิภาพของการดำเนินการ

อินเทอร์เฟซวิธีการดั้งเดิม

java ใช้อินเทอร์เฟซนี้เพื่อโต้ตอบกับแอปพลิเคชันที่ใช้งานในภาษาต่างๆ เช่น C/C++ การโต้ตอบเป็นแบบสองทิศทาง โดยที่ JVM อาจเรียกแอปพลิเคชันเหล่านั้นหรือแอปพลิเคชันเหล่านั้นสามารถเรียกได้

ไลบรารีวิธีการดั้งเดิม

มันติดตามไลบรารีภาษาแม่ซึ่งอาจใช้โดยเอ็นจิ้นการดำเนินการ

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

อ่านเพิ่มเติม: แนวคิดและหัวข้อโปรเจ็กต์ Java

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

บทสรุป

เราได้ผ่านฟีเจอร์เฉพาะของจาวามาบ้างแล้ว เข้าใจว่าจะเกิดอะไรขึ้นเมื่อเราคอมไพล์โค้ดในภาษาเช่น C/C++ เข้าใจความแตกต่างระหว่างโค้ดที่เรียกใช้งานได้โดยกำเนิดและโค้ดไบต์ เราได้อธิบายเกี่ยวกับสาเหตุที่ Java ถือเป็นภาษาที่ไม่ขึ้นกับแพลตฟอร์ม เข้าใจว่า JVM เป็นเหตุผลที่อยู่เบื้องหลังความเป็นอิสระของแพลตฟอร์มของ java เราได้ดูสถาปัตยกรรม JVM เพื่อความเข้าใจที่ดีขึ้น

เมื่อคุณทราบสาเหตุที่จาวาไม่ขึ้นกับแพลตฟอร์มแล้ว ให้สำรวจคุณสมบัติพิเศษอื่นๆ ของ java และเริ่มใช้งาน!

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java การพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบครบวงจร ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

ข้อดีของ Java เหนือภาษาอื่น ๆ คืออะไร?

Java มีข้อดีมากกว่าภาษาอื่นๆ มากมาย เริ่มจากข้อได้เปรียบสูงสุดกันก่อน Java เป็นอิสระจากแพลตฟอร์ม โค้ด Java สามารถทำงานบนแพลตฟอร์มฮาร์ดแวร์ ระบบปฏิบัติการ และเบราว์เซอร์ใดก็ได้ มันสามารถทำงานบนอุปกรณ์ใดก็ได้ ซึ่งหมายความว่าเมื่อคุณเขียนแอปพลิเคชันของคุณใน Java แล้ว คุณสามารถรันแอปพลิเคชันนั้นบนอุปกรณ์ใดก็ได้ มันง่ายอย่างนั้น! นอกจากนี้ เมื่อคุณเขียนโค้ดแล้ว การดีบักและแก้ไขจุดบกพร่องทำได้ง่ายมาก สุดท้าย Java เป็นแบบเชิงวัตถุ ซึ่งหมายความว่าคุณต้องใช้โปรแกรมและโค้ดที่เล็กกว่า ซึ่งจะทำให้โค้ดของคุณทำงานได้ง่ายขึ้น หากจำเป็นต้องแก้ไข โค้ดจะมีโอกาสเกิดข้อผิดพลาดน้อยกว่า มันมีคุณสมบัติเช่น Multithreading, การจัดการหน่วยความจำ, แพลตฟอร์มอิสระ, ความปลอดภัย, Virtual Machine เช่น, bytecode, Collection Framework, Garbage Collector, Layered Architecture เป็นต้น

เหตุใด Java แพลตฟอร์มจึงไม่ขึ้นกับ

Java ไม่ขึ้นกับแพลตฟอร์มเพราะใช้เครื่องเสมือน ภาษาการเขียนโปรแกรม Java และ API ทั้งหมดถูกคอมไพล์เป็นไบต์โค้ด Bytecodes นั้นไม่ขึ้นกับแพลตฟอร์มอย่างมีประสิทธิภาพ เครื่องเสมือนดูแลความแตกต่างระหว่าง bytecodes สำหรับแพลตฟอร์มต่างๆ ข้อกำหนดรันไทม์สำหรับ Java จึงมีน้อยมาก เครื่องเสมือน Java จะดูแลปัญหาที่เกี่ยวข้องกับฮาร์ดแวร์ทั้งหมด ดังนั้นจึงไม่ต้องคอมไพล์โค้ดสำหรับฮาร์ดแวร์อื่น

การรวบรวมขยะอัตโนมัติใน Java คืออะไร?

การรวบรวมขยะอัตโนมัติเป็นเทคนิคการรวบรวมขยะซึ่งตัวรวบรวมขยะทำงานโดยอัตโนมัติ โดยที่โปรแกรมเมอร์ไม่ต้องเขียนโค้ดสำหรับมัน ใน Java การรวบรวมขยะทำได้โดยการวาง Java Virtual Machine ลงในโหมดพิเศษ ตัวรวบรวมขยะจะทำงานเมื่อเห็นโอกาสในการทำเช่นนั้น ตัวรวบรวมขยะบางตัวใช้วิธีหยุดโลก และ Java Virtual Machine ต้องหยุดรันโปรแกรมเพื่อทำการรวบรวมขยะ Garbage Collection ไม่ใช่แนวคิดที่ง่าย แต่เมื่อคุณเข้าใจแล้ว จะไม่มีวันหวนกลับคืนมา และการรวบรวมขยะของ Java เป็นหนึ่งในวิธีที่ง่ายที่สุดในการทำความเข้าใจ