ปัญหาทั้งหมดในวิทยาการคอมพิวเตอร์สามารถแก้ไขได้โดยการอ้อมอีกระดับหนึ่ง ... ยกเว้นปัญหาของการอ้อมมากเกินไป
วิธีการของคุณไม่ได้แก้ปัญหาการเก็บขยะทันที แต่เลื่อนขึ้นไปหนึ่งระดับ และราคาเท่าไหร่! ทีนี้การเข้าถึงหน่วยความจำทุกครั้งจะต้องผ่านตัวชี้อีกอย่างหนึ่ง เราไม่สามารถแคชตำแหน่งผลลัพธ์ได้เนื่องจากอาจมีการย้ายที่ตั้งใหม่ในขณะเดียวกันเราต้องผ่าน ID วัตถุเสมอ ในระบบส่วนใหญ่การยอมรับทางอ้อมนี้ไม่เป็นที่ยอมรับและการหยุดยั้งโลกจะถือว่ามีค่าใช้จ่ายโดยรวมที่ต่ำกว่า
ฉันบอกว่าข้อเสนอของคุณย้ายปัญหาไม่ได้แก้ปัญหา ปัญหานี้เกี่ยวกับการนำ ID วัตถุมาใช้ซ้ำ ขณะนี้ ID วัตถุเป็นเทียบเท่าตัวชี้ของเราและมีที่อยู่จำนวน จำกัด เท่านั้น เป็นไปได้ (โดยเฉพาะกับระบบ 32 บิต) ที่ในช่วงอายุการใช้งานของโปรแกรมของคุณจะมีการสร้างออบเจ็กต์ INT_MAX มากกว่าเช่นในวงเช่น
while (true) {
Object garbage = new Object();
}
หากเราเพิ่งเพิ่ม ID วัตถุสำหรับแต่ละวัตถุเราจะหมดรหัสในบางจุด ดังนั้นเราต้องค้นหาว่า ID ใดที่ยังใช้งานอยู่และรหัสใดที่ฟรีเพื่อให้สามารถเรียกคืนได้ ฟังดูคุ้น ๆ ไหม? ตอนนี้เรากลับมาที่จตุรัสหนึ่งแล้ว