เมื่อวานฉันอ่านเรื่องการเก็บขยะและฉันไม่เข้าใจแนวคิดบางประการเกี่ยวกับเรื่องนี้ ฉันได้อ่านมาว่าสำหรับคอลเลกชันย่อยมักจะใช้เทคนิคการคัดลอกเพื่อย้ายวัตถุที่เข้าถึงได้ไปยังพื้นที่ของผู้รอดชีวิต และสำหรับคอลเลกชันหลักมักจะใช้การทำเครื่องหมายและกวาด
สิ่งแรกที่ฉันไม่เข้าใจคือตัวรวบรวมขยะเริ่มต้นจากราก gc และเคลื่อนที่ไปตามกราฟเพื่อตรวจจับอินสแตนซ์สด แต่จะรู้ได้อย่างไรว่าวัตถุใดยังอายุน้อยและวัตถุใดเก่า จะรู้ได้อย่างไรว่าวัตถุพื้นที่หน่วยความจำใดอยู่ใน?
อย่างที่สองคือถ้าเราทำแค่คอลเลกชั่นรองเท่านั้น gc จะรู้ได้อย่างไรว่าอ็อบเจ็กต์ในยุคใหม่ไม่ได้ถูกอ้างอิงโดยอ็อบเจ็กต์ในรุ่นเก่าหรือโดยการอ้างอิงแบบสแตติกจากขอบเขตวิธีการ
สิ่งสุดท้ายคือหลังจากทำเครื่องหมายและกวาดบางครั้งการบดอัดก็เสร็จสิ้น gc รู้ได้อย่างไรว่าการอ้างอิงถึงวัตถุที่ถูกย้ายใดที่ต้องได้รับการอัปเดต หากเรามีโปรแกรมที่มีเธรดหลายพันเธรดพร้อมเฟรมสแต็กขนาดใหญ่และฮีปที่ใช้เป็นกิกะไบต์ มันมีโครงสร้างภายในที่มีข้อมูลนั้นอยู่ในรูปแบบของแผนที่หรืออะไรสักอย่าง?
ขอบคุณ!