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
ขอบคุณสำหรับการอ่าน! ถ้าชอบกรุณาปรบมือและติดตามเพจผมนะครับ
“กิษรา พุทธิกา”