Garbage Collection
Garbage collection क्या है
Garbage collection Java द्वारा उस memory को अपने-आप मुक्त करना है जिसकी objects को अब ज़रूरत नहीं। C जैसी languages में आप हाथ से memory मुक्त करते हैं, जो error-prone है। Java में, JVM का garbage collector उन objects को ढूँढता है जिन्हें कोई इस्तेमाल नहीं करता और उनकी memory आपके लिए वापस लेता है।
Objects heap पर रहते हैं
new से बनाया हर object heap पर रहता है — JVM द्वारा manage की memory का क्षेत्र। जैसे आपका program चलता है, यह वहाँ कई objects बनाता है। Garbage collector heap पर काम करता है, memory उपलब्ध रखने को अब reachable न रहे objects साफ़ करके।
Object कब collect होता है
Object collection के योग्य तब बनता है जब कोई उसे reference न करे:
- उसका variable
nullset हो। - Variable scope से बाहर जाए (method ख़त्म हो)।
- यह दूसरे object से बदल जाए।
एक बार unreachable होने पर, garbage collector उसकी memory वापस ले सकता है — आप ठीक कब का नियंत्रण नहीं करते।
एक सरल उदाहरण
String s = new String("Hello"); // heap पर object
s = null; // अब unreachable
// पुराना "Hello" object GC के योग्य है
s = null set करना "Hello" object का इकलौता reference हटा देता है, तो कुछ उसकी ओर इशारा नहीं करता। यह अब garbage collection के योग्य है, और JVM collector चलाने पर उसे मुक्त कर देगा।
System.gc और finalize
System.gc(); // GC चलाने का सुझाव, आदेश नहीं
System.gc() सिर्फ़ JVM से garbage collection चलाने को कहता है; JVM तय करता है क्या और कब। पुरानी finalize() method (object collect होने से पहले call होती थी) deprecated है — इस्तेमाल न कीजिए।
यह क्यों मदद करता है
- कम bugs — memory मुक्त करना भूलना नहीं, double-frees नहीं।
- कोई मैन्युअल काम नहीं — आप logic पर ध्यान देते हैं, memory bookkeeping पर नहीं।
- सुरक्षित programs — बड़े systems को Java भरोसेमंद होने का बड़ा कारण।
Trade-off है memory ठीक कब मुक्त होती है इसका कम सटीक नियंत्रण, जो ज़्यादातर programs को ठीक है।
आम गलतियाँ
- यह सोचना आपको memory मुक्त करनी है। Java अपने-आप करती है।
System.gc()पर भरोसा। यह सिर्फ़ सुझाव है, गारंटी नहीं।finalize()इस्तेमाल करना। यह deprecated और अविश्वसनीय है।- अनचाहे references रखना। अब भी referenced objects कभी collect नहीं होते — memory leak।
सारांश
- Garbage collection अनुपयोगी objects की memory अपने-आप मुक्त करता है।
- Objects heap पर रहते हैं, JVM द्वारा managed।
- Object तब योग्य होता है जब कोई उसे reference न करे।
System.gc()सिर्फ़ सुझाव है;finalize()deprecated है।- यह memory bugs कम करता है — बस अनचाहे references छोड़ दीजिए।
आगे, cleanup keywords सीखिए final, finally और finalize में, या objects दोहराइए classes और objects में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Java में garbage collection क्या है?
Object garbage collection के योग्य कब बनता है?
Java objects memory में कहाँ रहते हैं?
क्या Java में garbage collection force कर सकता हूँ?
System.gc() से सुझा सकते हैं, पर यह सिर्फ़ request है — JVM तय करता है असल में कब चलाना है। व्यवहार में आप शायद ही इसे call करते हैं; garbage collector ज़रूरत अनुसार अपने-आप चलता है।