जब किसी ऑब्जेक्ट के लिए कोई रेफरेंस नहीं रहता, तो ऑब्जेक्ट फाइनलाइज़ हो जाता है और जब गार्बेज कलेक्शन शुरू होता है तो ये फाइनलाइज़्ड ऑब्जेक्ट्स कलेक्ट हो जाते हैं। यह JVM द्वारा स्वचालित रूप से किया जाता है। हम गार्बेज कलेक्शन को सीधे कॉल कर सकते हैं लेकिन यह गारंटी नहीं देता कि GC तुरंत निष्पादित होना शुरू कर देगा।
हम गार्बेज कलेक्शन को दो तरीकों से स्पष्ट रूप से कॉल कर सकते हैं:
- System.gc() मेथड
- Runtime.gc() मेथड
java.lang.Runtime.freeMemory() मेथड Java Virtual Machine (JVM) में फ्री मेमोरी की मात्रा लौटाता है। gc() मेथड को कॉल करने से freeMemory द्वारा लौटाए गए मान में वृद्धि हो सकती है।
उदाहरण
public class GarbageCollectionTest {
public static void main(String args[]) {
System.out.println(Runtime.getRuntime().freeMemory());
for (int i=0; i<= 100000; i++) {
Double d = new Double(300);
}
System.out.println(Runtime.getRuntime().freeMemory());
System.gc();
System.out.println(Runtime.getRuntime().freeMemory());
}
}
आउटपुट
15648632 13273472 15970072
पहला मान प्रारंभिक फ्री मेमोरी है, दूसरा ऑब्जेक्ट्स बनाने के बाद, और तीसरा System.gc() कॉल करने के बाद। ध्यान दें कि GC तुरंत चलने की गारंटी नहीं देता।