JVM ทำงานอย่างไร?

1.คลาสโหลดเดอร์()

2. พื้นที่หน่วยความจำ

3. กลไกการดำเนินการ

1.คลาสโหลดเดอร์()

JVM ใช้กระบวนการ การโหลด การเชื่อมโยง และการเริ่มต้น เพื่อให้โปรแกรมที่รันโปรแกรมประเภทต่างๆ พร้อมใช้งาน

กำลังโหลด

ภารกิจหลักคือโหลดคลาสลงในหน่วยความจำ (เช่นตัวโหลดคลาส Boostrap, ตัวโหลดคลาสกำหนดแบบกำหนดเอง)

Hello.java › Hello.class › การโหลด JVM (ใช้ชื่อคลาสแบบเต็ม (com.company.sample…), ข้อมูลตัวแปร, ข้อมูลพาเรนต์ทันที, คลาสหรืออินเทอร์เฟซหรือ enum)

เมื่อคลาสถูกโหลด JVM จะสร้างอ็อบเจ็กต์ในประเภทข้อมูล Java จากไฟล์คลาส

การเชื่อมโยง

สามขั้นตอนในกระบวนการเชื่อมโยงมีดังนี้:

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

การเตรียมการ — หากใช้ตัวแปรระดับอินสแตนซ์หรือตัวแปรระดับคงที่ในส่วนการเตรียมคลาสจะกำหนดค่าเริ่มต้นสำหรับสิ่งนั้น

ความละเอียด — เราต้องทำทุกอย่างในภาษาแอสเซมบลีบางภาษา ใน Java เราสามารถสร้างคลาสแบบกำหนดเองสำหรับ scinareos ที่แตกต่างกันได้ Java ช่วยให้เราใช้คำเฉพาะโดเมน เช่น พนักงาน/นักเรียน JVM แทนที่ลิงก์สัญลักษณ์ด้วยลิงก์โดยตรงก่อนที่จะถึงระดับเครื่อง

การเริ่มต้น

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

2. พื้นที่หน่วยความจำ

✓ คลาสจะโหลดข้อมูลคลาสทั้งหมดลงในพื้นที่เมธอด ในหน่วยความจำเมื่อมีการโหลด JVM ทุกตัวมีพื้นที่วิธีการเดียว

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

สแต็ค เก็บข้อมูลวิธีการ ต่อเธรด

การลงทะเบียนพีซี เก็บข้อมูลเกี่ยวกับการดำเนินการครั้งต่อไป ต่อเธรด

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

3. กลไกการดำเนินการ

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

ขอบคุณสำหรับการอ่าน! ถ้าชอบกรุณาปรบมือและติดตามเพจผมนะครับ

“กิษรา พุทธิกา”