1. อัลกอริทึมการวิเคราะห์การเข้าถึง (การค้นหารูท)
JVM กำหนดว่าวัตถุนั้นมีชีวิตอยู่ผ่านการวิเคราะห์การเข้าถึงหรือไม่ แนวคิดพื้นฐานของอัลกอริทึมนี้คือการใช้ชุดของวัตถุที่เรียกว่า GC Roots เป็นจุดเริ่มต้นและค้นหาลงจากโหนดเหล่านี้ เส้นทางที่ค้นหาผ่านเรียกว่าโซ่อ้างอิง เมื่อวัตถุเชื่อมต่อกับ GC Roots โดยไม่มีโซ่อ้างอิงใด ๆ มันจะถูกพิสูจน์ว่าวัตถุนี้ไม่สามารถใช้งานได้ ในรูปด้านล่างวัตถุ object1 , object2 , object3 และ object4 เป็นวัตถุที่มีอยู่ แม้ว่า object5 , object6 และ object7 นั้นเกี่ยวข้องกัน แต่ก็ไม่สามารถเข้าถึง GC Roots ได้ดังนั้นพวกเขาจะถูกตัดสินว่าเป็นวัตถุที่รีไซเคิลได้
ในภาษา Java วัตถุต่อไปนี้ที่สามารถใช้เป็นราก GC รวมถึง:
1. วัตถุที่อ้างอิงในสแต็กเครื่องเสมือน (ตัวแปรท้องถิ่นในเฟรมสแต็ก)
2. วัตถุอ้างอิงโดยแอตทริบิวต์คงที่คลาสในพื้นที่วิธีการ
3. วัตถุอ้างอิงโดยค่าคงที่ในพื้นที่วิธีการ
4. วัตถุที่อ้างอิงโดย JNI (วิธีการดั้งเดิม) ในสแต็กวิธีการท้องถิ่น
2. ซอร์สโค้ดสปริง
spring สร้างวัตถุผ่านคลาสที่ใช้อินเทอร์เฟซ BeanFactory กับโครงสร้างการใช้งานต่อไปนี้:
simplejndibeanfactory.java
Public Class SimpleJnDibeanFactory ขยาย JNDILOCATORSUPPORT ใช้ beanFactory {ชุดสุดท้ายส่วนตัว <String> ShareBlerEsources = new HashSet (); // แผนที่ที่สร้างขึ้นโดยใช้ใหม่เป็นวัตถุที่อ้างถึงในสแต็กและสามารถใช้เป็น GC Roots Object Private Map <String, Object> SingletonObjects = new HashMap (); แผนที่สุดท้ายส่วนตัว <String, คลาส <? >> ResourceTypes = new HashMap (); Public SimplejndibeanFactory () {this.setResourceRef (จริง); } โมฆะสาธารณะ addshareableresource (String SharelableSource) {this.shareableresources.add (ShareblerEsource); } โมฆะสาธารณะ setshareableresources (สตริง ... SharelerEsources) {this.shareleresources.addall (array.aslist (Sharebleresources)); } วัตถุสาธารณะ getBean (ชื่อสตริง) พ่น beansexception {return this.getBean (ชื่อ, object.class); -staticlistablebeanfactory.java
คลาสสาธารณะ staticlistablebeanfactory ใช้งาน ListableBeanFactory {แผนที่สุดท้ายส่วนตัว <String, Object> Beans; สาธารณะ staticlistableBeanFactory () {// แผนที่ที่สร้างขึ้นโดยใช้ใหม่เป็นวัตถุที่อ้างอิงในสแต็กซึ่งสามารถใช้เป็นวัตถุ GC Roots วัตถุนี้ได้ = ใหม่ LinkedHashMap (); } สาธารณะ staticlistableBeanFactory (แผนที่ <สตริงวัตถุ> ถั่ว) {assert.notnull (ถั่ว "แผนที่ถั่วจะต้องไม่เป็นโมฆะ"); this.beans = ถั่ว; } โมฆะสาธารณะ addBean (ชื่อสตริง, ถั่ววัตถุ) {this.beans.put (ชื่อ, ถั่ว); - จากซอร์สโค้ดด้านบนเราจะเห็นว่าวัตถุนั้นถูกเก็บไว้ในแผนที่ซึ่งใช้ mapsingletonObjects เพื่อจัดเก็บวัตถุซิงเกิล map singletonObjects และ beans (ใหม่ในตัวสร้าง) ถูกสร้างขึ้นโดยตรงโดยใช้คำหลัก new ซึ่งเป็นข้อมูลอ้างอิงที่แข็งแกร่งและตรงตามเงื่อนไขเป็นวัตถุ GC Roots (วัตถุที่อ้างอิงใน map แต็กเครื่องเสมือน ( GC Roots对ท้องถิ่นในกรอบสแต็ก)
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร