หลังจากอ็อบเจ็กต์ถูกใช้งานแล้ว จะถูก deallocate ออกจากหน่วยความจำโดย Garbage Collector อ็อบเจ็กต์ถูกทำลายเมื่อไม่มี reference ชี้ไปยังอ็อบเจ็กต์นั้น GC จะเรียกเมธอด finalize() บนอ็อบเจ็กต์ที่จะถูกทำลาย
Island of Isolation คืออะไร?
เมื่ออ็อบเจ็กต์สองตัว 'a' และ 'b' อ้างอิงกันเอง (a ชี้ b, b ชี้ a) และไม่มีอ็อบเจ็กต์อื่นอ้างอิงถึงพวกเขา เรียกว่า Island of Isolation
เป็นกลุ่มของอ็อบเจ็กต์ที่อ้างอิงกันเอง แต่ไม่ถูกอ้างอิงโดยอ็อบเจ็กต์อื่นของแอปพลิเคชันอื่นๆ เลย
หมายเหตุ: อ็อบเจ็กต์เดี่ยวที่ไม่มี reference ชี้มาก็เป็น Island of Isolation เช่นกัน
ตัวอย่าง
public class Demo {
Demo i;
public static void main(String[] args) {
Demo my_ob_1 = new Demo();
System.out.println("Demo object one has been created");
Demo my_ob_2 = new Demo();
System.out.println("Demo object two has been created");
my_ob_1.i = my_ob_2;
my_ob_2.i = my_ob_1;
my_ob_1 = null;
my_ob_2 = null;
System.gc();
}
@Override
protected void finalize() throws Throwable {
System.out.println("The finalize method has been called on the object");
}
}
ผลลัพธ์
Demo object one has been created Demo object two has been created The finalize method has been called on the object The finalize method has been called on the object
คลาส Demo มีตัวแปรประเภท Demo เอง ใน main สร้างอ็อบเจ็กต์ 2 ตัว ให้อ้างอิงกัน (my_ob_1.i = my_ob_2 และ my_ob_2.i = my_ob_1) ตั้งค่าทั้งคู่เป็น null เรียก System.gc() กระตุ้น GC finalize() ถูก override พิมพ์ข้อความเมื่อถูกเรียก