Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

อธิบายรายละเอียดเกี่ยวกับการรวบรวมขยะการนับการอ้างอิงใน JavaScript หรือไม่


การอ้างอิงการนับการรวบรวมขยะ

นี่คืออัลกอริธึมการรวบรวมขยะที่ง่ายที่สุด อัลกอริธึมนี้จะมองหาอ็อบเจ็กต์ที่ไม่มีการอ้างอิงเหลือ อ็อบเจ็กต์จะมีสิทธิ์สำหรับการรวบรวมขยะหากไม่มีการอ้างอิงแนบ การรวบรวมขยะมีคำอธิบายในตัวอย่างด้านล่าง

ตัวอย่าง

var obj = {
      x: { y: 2 }
         };
         // 2 objects created. One is referenced by the other as one of its properties.
         // Obviously, none can be garbage-collected
obj = 1; // what was the 'x' property of the object originally in obj
         // has zero references to it. It can be garbage collected.

ข้อจำกัด

เมื่อพูดถึง รอบ มีข้อจำกัดในการรวบรวมขยะที่นับการอ้างอิงและอธิบายไว้ในตัวอย่างด้านล่าง

ตัวอย่าง

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

function f() {
var obj1 = {};
var obj2 = {};
obj1.p = obj2; // o1 references o2
obj2.p = obj1; // o2 references o1. This creates a cycle.
}
f();