อธิบายสถาปัตยกรรมและส่วนประกอบ Java [2022]

เผยแพร่แล้ว: 2021-01-04

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

บทความนี้อนุมานว่าคุณมีความเข้าใจทั่วไปเกี่ยวกับพื้นฐานของ Java แม้ว่าคุณจะไม่คุ้นเคยกับพื้นฐานของ Java ก็ตาม คุณสามารถถามคำถามใดๆ ที่คุณอาจมีในส่วนความคิดเห็นด้านล่าง มาเริ่มกันเลย:

สารบัญ

สถาปัตยกรรม Java อธิบาย

Java มีสองกระบวนการ การคอมไพล์และการตีความ Java Compiler แปลงรหัสที่มีอยู่ใน Java เป็นรหัสไบต์ Java Virtual Machine (JVM) แปลงรหัสไบต์เป็นรหัสเครื่องที่เครื่องดำเนินการโดยตรง

เราสามารถอธิบายกระบวนการนี้ได้ในขั้นตอนต่อไปนี้:

  • ซอร์สโค้ดไปที่ Java Compiler
  • Java Compiler แปลงเป็นรหัสไบต์
  • รหัสไบต์ไปที่ Java Virtual Machine
  • สุดท้ายก็ไปที่ OS (ระบบปฏิบัติการ)

ตอนนี้เราค่อนข้างคุ้นเคยกับวิธีการทำงานของสถาปัตยกรรม Java แล้ว เรามาดูส่วนประกอบต่างๆ ของ Java ได้:

JVM (เครื่องเสมือน Java)

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

JVM โหลดตรวจสอบและรันโค้ด นอกจากนี้ยังจัดเตรียมสภาพแวดล้อมรันไทม์ให้กับโค้ดเพื่อให้สามารถรันในเครื่องได้

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

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

JDK (ชุดพัฒนา Java)

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

ส่วนประกอบของJVM

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

ระบบย่อย ClassLoader

ClassLoader เป็นระบบย่อยของ Java Virtual Machine ซึ่งโหลดไฟล์คลาส เป็นองค์ประกอบแรกของสถาปัตยกรรมในขณะที่โหลดโปรแกรมเพื่อให้สามารถทำงานอื่น ๆ ได้ นอกจากนี้ยังเชื่อมโยงและเริ่มต้นไฟล์คลาส เราสามารถแบ่งการทำงานออกเป็นสามส่วนต่อไปนี้:

กำลังโหลด

องค์ประกอบนี้โหลดคลาส มี BootStrap ClassLoader สำหรับการโหลดคลาสที่เป็นของ bootstrap classpath Extension ClassLoader โหลดคลาสที่อยู่ภายในโฟลเดอร์ ext และ Application ClassLoader โหลดพาธที่กล่าวถึง Environment Variable และไฟล์ที่คล้ายกัน

เชื่อมโยง

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

การเริ่มต้น

ในส่วนนี้ของ ClassLoading ระบบจะกำหนดตัวแปรสแตติกให้กับค่าดั้งเดิมและดำเนินการบล็อกสแตติก

พื้นที่ข้อมูลรันไทม์

ส่วนนี้ของ JVM มีส่วนประกอบดังต่อไปนี้:

พื้นที่วิธีการ

พื้นที่เมธอดเก็บข้อมูลระดับคลาสทั้งหมด JVM ทุกรายการมีพื้นที่วิธีเดียวเท่านั้น

พื้นที่กอง

พื้นที่ฮีปจะเก็บอ็อบเจ็กต์ทั้งหมด รวมถึงอาร์เรย์และตัวแปรของอินสแตนซ์ เช่นเดียวกับพื้นที่เมธอด JVM มีพื้นที่ฮีปเดียวเท่านั้น

พื้นที่กอง

ส่วนนี้จะสร้างรันไทม์สแต็กที่ไม่ซ้ำกันสำหรับทุกภัยคุกคาม และสร้างรายการสำหรับการเรียกใช้เมธอดทุกรายการในหน่วยความจำสแต็ก (หรือที่เรียกว่าสแต็กเฟรม) มันมี Local Variable Array ซึ่งเกี่ยวข้องกับเมธอด ตัวถูกดำเนินการ ซึ่งทำหน้าที่เป็นเวิร์กสเปซสำหรับการดำเนินการระดับกลาง และข้อมูลเฟรม ซึ่งสัญลักษณ์ทั้งหมดที่เกี่ยวข้องกับเมธอดยังคงอยู่ ข้อมูลเฟรมจะรักษาข้อมูลบล็อก catch เว้นแต่จะมีข้อยกเว้น

การลงทะเบียนพีซี

ทุกเธรดมี PC Registers แยกกัน ซึ่งเก็บที่อยู่ของคำแนะนำในการรัน เมื่อคำสั่งดำเนินการเสร็จสิ้น การลงทะเบียน PC จะอัปเดตตัวเองด้วยคำสั่งถัดไป

กองวิธีการดั้งเดิม

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

คุณควรสังเกตว่าสององค์ประกอบแรกของพื้นที่ข้อมูลรันไทม์ (พื้นที่เมธอดและพื้นที่ฮีป) เป็นทรัพยากรที่ใช้ร่วมกันในขณะที่พื้นที่สแต็กไม่ใช่

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

Execution Engine รัน bytecode มันอ่านและดำเนินการทีละส่วน นอกจากนี้ยังมีองค์ประกอบต่าง ๆ :

ล่าม

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

JIT คอมไพเลอร์

JIT Compiler ไม่มีข้อเสียเปรียบที่ล่ามมี ดังนั้น เมื่อ Execution Engine พบโค้ดที่ซ้ำกัน โปรแกรมจะใช้ JIT Compiler แทนล่าม JIT Compiler แปลง bytecode เป็นโค้ดเนทีฟหลังจากคอมไพล์แล้ว ระบบใช้รหัสเนทีฟโดยตรง

JIT Compiler มีตัวสร้างโค้ดระดับกลางสำหรับสร้างโค้ดระดับกลางและตัวเพิ่มประสิทธิภาพโค้ดสำหรับการเพิ่มประสิทธิภาพแบบเดียวกัน นอกจากนี้ยังมีตัวสร้างโค้ดเป้าหมายที่สร้างโดเนทีฟและโปรไฟล์ที่ค้นหาฮอตสปอต

เก็บขยะ

องค์ประกอบสุดท้ายของ Execution Engine คือตัวรวบรวมขยะที่รวบรวมและกำจัดอ็อบเจ็กต์ที่ไม่ได้อ้างอิง คุณสามารถทริกเกอร์ได้โดยการเรียก system.gc() แต่ไม่รับประกันการทำงาน

นอกเหนือจากส่วนประกอบเหล่านี้แล้ว JVM ยังมี JNI (Java Native Interface) และ Native Method Libraries อดีตโต้ตอบกับหลังและจัดเตรียม Native Libraries ที่จำเป็นสำหรับการดำเนินการ

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

ความคิดสุดท้าย

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

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Java และแอปพลิเคชันในบล็อกของเรา เรามีคู่มือและบทความที่เป็นประโยชน์มากมายที่ครอบคลุมแง่มุมต่างๆ ของภาษาการเขียนโปรแกรมที่มีประสิทธิภาพนี้

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

เตรียมความพร้อมสู่อาชีพแห่งอนาคต

สมัครเลยตอนนี้สำหรับปริญญาโทด้านวิศวกรรมซอฟต์แวร์