การโหลดคลาส
การโหลดคลาสหมายถึงการอ่านข้อมูลไบนารีจากไฟล์คลาส. class ลงในหน่วยความจำวางไว้ในพื้นที่วิธีการของพื้นที่ข้อมูลรันไทม์จากนั้นสร้าง java.lang.class วัตถุในพื้นที่ฮีปเพื่อใช้โครงสร้างข้อมูล ของชั้นเรียนในพื้นที่วิธีการ
วิธีโหลดไฟล์. class:
1. โหลดโดยตรงจากระบบท้องถิ่น
2. ดาวน์โหลดไฟล์. class ผ่านอินเทอร์เน็ต
3. โหลดไฟล์. class จาก zip, jar ฯลฯ
4. แยกไฟล์. class จากฐานข้อมูลที่เป็นกรรมสิทธิ์
5. รวบรวมไฟล์ต้นฉบับ Java แบบไดนามิกลงในไฟล์. class แบบไดนามิก
ผลิตภัณฑ์ขั้นสุดท้ายของการโหลดคลาสคือวัตถุคลาสที่อยู่ในพื้นที่ฮีป
วัตถุคลาสห่อหุ้มโครงสร้างข้อมูลของคลาสในพื้นที่เมธอดและให้โปรแกรมเมอร์ Java กับอินเทอร์เฟซเพื่อเข้าถึงโครงสร้างข้อมูลในพื้นที่เมธอด
โหลดเดอร์โหลดคลาสสองประเภท:
1. ตัวโหลดที่มาพร้อมกับ Java Virtualizer
ตัวโหลดคลาสรูท (bootstrap)
ตัวโหลดคลาสส่วนขยาย (ส่วนขยาย)
ตัวโหลดคลาสระบบหรือแอปพลิเคชันโหลดเดอร์ (ระบบ)
ตัวโหลดสองตัวหลังถูกนำไปใช้ใน Java และตัวโหลดคลาสรูทเขียนใน C ++ และโปรแกรมเมอร์ไม่สามารถรับคลาสนี้ในรหัส Java ได้
2. ตัวโหลดคลาสที่ผู้ใช้กำหนด
คลาสย่อยของ java.lang.classloader
ผู้ใช้สามารถปรับแต่งวิธีการโหลดของคลาส
ตัวโหลดคลาสไม่จำเป็นต้องรอจนกว่าคลาสจะถูกใช้เป็นครั้งแรกก่อนที่จะโหลด
ข้อกำหนด JVM อนุญาตให้รถตักของคลาสโหลดคลาสล่วงหน้าเมื่อพวกเขาคาดหวังว่าจะใช้งาน รายงานข้อผิดพลาด (LinkageERROR) หากคลาสนี้ยังไม่ได้ใช้งานอย่างแข็งขันโดยโปรแกรมตัวโหลดคลาสจะไม่รายงานข้อผิดพลาด
กลไกการถอนการติดตั้งชั้นเรียน
วงจรชีวิตของคลาส
เมื่อวัตถุคลาสที่เป็นตัวแทนของคลาสตัวอย่างไม่ได้อ้างอิงอีกต่อไปนั่นคือมันไม่สามารถสัมผัสได้วัตถุคลาสจะสิ้นสุดวงจรชีวิตและข้อมูลของคลาสตัวอย่างในพื้นที่วิธีการจะถูกขนถ่าย วัฏจักรของคลาสตัวอย่าง
จะเห็นได้ว่าเมื่อชั้นเรียนจบวัฏจักรชีวิตขึ้นอยู่กับเมื่อวัตถุคลาสที่เป็นตัวแทนของมันจะสิ้นสุดวงจรชีวิตของมัน
ตัวโหลดความสัมพันธ์แบบอ้างอิงและวัตถุคลาส:
ในการใช้งานภายในของตัวโหลดคลาสจะใช้คอลเลกชัน Java เพื่อจัดเก็บการอ้างอิงไปยังคลาสที่โหลด
ในทางกลับกันวัตถุคลาสจะอ้างอิงตัวโหลดคลาสเสมอ เรียกเมธอด getClassLoader () ของวัตถุคลาสเพื่อรับตัวโหลดคลาส
จะเห็นได้ว่ามีความสัมพันธ์แบบสองทิศทางระหว่างอินสแตนซ์คลาสและตัวโหลดที่โหลด
วัตถุคลาสวัตถุคลาสวัตถุอินสแตนซ์คลาส:
อินสแตนซ์ของคลาสหมายถึงวัตถุคลาสที่แสดงถึงคลาสเสมอ
เมธอด getClass () ถูกกำหนดไว้ในคลาสวัตถุซึ่งส่งคืนการอ้างอิงไปยังวัตถุคลาสที่แสดงคลาสที่เป็นของวัตถุ
นอกจากนี้คลาส Java ทั้งหมดมีคลาสคุณสมบัติคงที่ที่อ้างอิงวัตถุคลาสที่แสดงถึงคลาสนี้
ถอนการติดตั้งชั้นเรียน
คลาสที่โหลดโดยตัวโหลดคลาสที่มาพร้อมกับเครื่องเสมือน Java จะไม่ถูกถอนการติดตั้งในระหว่างวงจรชีวิตของเครื่องเสมือน
ดังที่ได้กล่าวไว้ก่อนหน้านี้รถตักคลาสที่มาพร้อมกับเครื่องเสมือน Java รวมถึงตัวโหลดคลาสรูทตัวโหลดคลาสส่วนขยายและตัวโหลดคลาสของระบบ
เครื่องเสมือน Java นั้นมักจะอ้างอิงตัวโหลดคลาสเหล่านี้เสมอและตัวโหลดคลาสเหล่านี้มักจะอ้างถึงวัตถุคลาสของคลาสที่พวกเขาโหลดดังนั้นวัตถุคลาสเหล่านี้สามารถเข้าถึงได้เสมอ
คลาสที่โหลดโดยตัวโหลดคลาสที่ผู้ใช้กำหนดสามารถขนถ่ายได้
ตัวอย่างเฉพาะ
ตัวแปร Loader1 และตัวแปร OBJ ใช้วัตถุคลาสที่เป็นตัวแทนของคลาสตัวอย่างในขณะที่ตัวแปร objclass อ้างอิงโดยตรง
หากตัวแปรอ้างอิงสามตัวที่ด้านซ้ายของภาพด้านบนถูกตั้งค่าเป็นโมฆะระหว่างการดำเนินการโปรแกรมวัตถุตัวอย่างจะสิ้นสุดวัฏจักรชีวิตของมัน วงจร
เมื่อมีความจำเป็นอีกครั้งมันจะตรวจสอบว่าวัตถุคลาสของคลาสตัวอย่างมีอยู่หรือไม่ จะถูกสร้างขึ้นในพื้นที่ฮีปของ Java Virtual Machine