Đối tượng được tạo trong quá trình thực thi chương trình sẽ tự động bị xóa bởi Garbage Collector (GC). Khi đối tượng không được tham chiếu bởi bất kỳ luồng nào và JVM xác định không thể truy cập, nó đủ điều kiện được thu gom rác.
Lớp Object có phương thức finalize(), được GC tự động gọi trước khi xóa đối tượng khỏi heap. Trong Java 9, phương thức finalize() đã bị deprecated (ngừng sử dụng) và lớp mới java.lang.ref.Cleaner được thêm vào để quản lý garbage collection. Đối tượng của lớp Cleaner tự động được thông báo khi đối tượng đủ điều kiện được thu gom rác. Đối tượng đang bị thu gom rác cần đăng ký với cleaner object bằng phương thức register().
Ví dụ
import java.lang.ref.Cleaner;
public class CleanerTest {
public static void main(String args[]) {
System.out.println("TutorialsPoint");
Cleaner cleaner = Cleaner.create();
if(true) {
CleanerTest myObject = new CleanerTest();
cleaner.register(myObject, new State()); // register cleaner
}
for(int i = 1; i <= 10000; i++) {
String[] largeObject = new String[1000];
try {
Thread.sleep(1);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
private static class State implements Runnable {
public void run() {
System.out.print("Cleaning action");
}
}
}
Kết quả
TutorialsPoint Cleaning action
Khi myObject hết phạm vi (out of scope) và GC chạy, hành động dọn dẹp (cleaning action) được thực thi.