प्रोग्राम निष्पादन के दौरान बनाया गया एक ऑब्जेक्ट गार्बेज कलेक्टर (GC) द्वारा स्वचालित रूप से हटा दिया जाता है। जब कोई ऑब्जेक्ट किसी थ्रेड द्वारा रेफरेंस नहीं किया जाता और जब JVM निर्धारित करता है कि इस ऑब्जेक्ट तक पहुंचा नहीं जा सकता, तो यह गार्बेज कलेक्शन के लिए पात्र हो जाता है।
Object क्लास में एक finalize() मेथड होता है, जिसे GC द्वारा हीप से ऑब्जेक्ट को हटाने का प्रयास करने से पहले स्वचालित रूप से कॉल किया जाता है। जावा 9 में, finalize() मेथड को डिप्रिकेट कर दिया गया है और गार्बेज कलेक्शन प्रबंधन के लिए एक नई क्लास java.lang.ref.Cleaner जोड़ी गई है। Cleaner क्लास का एक ऑब्जेक्ट स्वचालित रूप से सूचित हो जाता है जब कोई ऑब्जेक्ट गार्बेज कलेक्शन के लिए पात्र हो जाता है। जिस ऑब्जेक्ट को गार्बेज कलेक्ट किया जा रहा है, उसे register() मेथड का उपयोग करके क्लीनर ऑब्जेक्ट के साथ पंजीकृत करने की आवश्यकता होती है।
उदाहरण
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");
}
}
}
आउटपुट
TutorialsPoint Cleaning action