Sau khi đối tượng được sử dụng, nó được giải phóng khỏi bộ nhớ bằng Garbage Collector. Các đối tượng bị hủy dựa trên việc không có tham chiếu đến đối tượng đó. Garbage Collector gọi hàm finalize trên đối tượng cần hủy.
Đảo cô lập là gì?
Khi hai đối tượng a và b tham chiếu lẫn nhau, và không được tham chiếu bởi đối tượng nào khác, đó gọi là đảo cô lập.
Đó là nhóm đối tượng tham chiếu lẫn nhau nhưng không được tham chiếu bởi đối tượng của ứng dụng khác.
Lưu ý - Một đối tượng không được tham chiếu đơn lẻ cũng là đảo cô lập.
Hãy xem ví dụ:
Ví dụ
public class Demo{
Demo i;
public static void main(String[] args){
Demo my_ob_1 = new Demo();
System.out.println("Đối tượng Demo 1 đã tạo");
Demo my_ob_2 = new Demo();
System.out.println("Đối tượng Demo 2 đã tạo");
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("Phương thức finalize đã được gọi trên đối tượng");
}
}
Kết quả
Đối tượng Demo 1 đã tạo Đối tượng Demo 2 đã tạo Phương thức finalize đã được gọi trên đối tượng Phương thức finalize đã được gọi trên đối tượng
Lớp Demo chứa main. Biến kiểu Demo tạo. Instance Demo tạo và đối tượng thứ hai gán cho đối tượng Demo của đối tượng đầu. Cái tương tự ngược lại. Bây giờ cả hai gán null và System.gc() gọi. Hàm finalize ghi đè.