2010-03-12 17 views
11

मैं सोच रहा था कि जावा में कचरा कलेक्टर निम्नलिखित स्थिति से कैसे निपटता है।जावा में कचरा संग्रह कैसे काम करता है?

वस्तु एक बी वस्तु के लिए एक संदर्भ है और वस्तु बी सी मुख्य कार्यक्रम ए वस्तु को तो तुम वस्तु बी गर्त वस्तु एक का उपयोग कर सकते एक संदर्भ है, और वस्तु सी गर्त वस्तु बी वस्तु के लिए एक संदर्भ है गंदे ऑब्जेक्ट ए

ऑब्जेक्ट बी और ऑब्जेक्ट सी के साथ क्या होता है, यदि ऑब्जेक्ट ए और ऑब्जेक्ट बी के बीच का लिंक शून्य हो गया है?

क्या ऑब्जेक्ट बी और ऑब्जेक्ट सी अब कचरा कलेक्टर द्वारा एकत्र किया जाना चाहिए? मेरा मतलब है कि ऑब्जेक्ट बी और ऑब्जेक्ट सी के बीच अभी भी एक कनेक्शन है

+0

मैंने दूसरे प्रश्न को एक अलग पोस्ट में पूछा: http://stackoverflow.com/questions/2433261/how-does-garbage-collection-in-java-work-with-classes – JordyOnrust

उत्तर

9

बी वस्तु और अब कर दिया गया कचरा कलेक्टर द्वारा एकत्र सी वस्तु चाहिए?

हां। खैर, वे वसूली के लिए उम्मीदवार हैं जड़ ए

4

आप एक विशिष्ट समय पर काम करने के लिए कचरा कलेक्टर पर भरोसा नहीं कर सकते हैं, क्योंकि इसका व्यवहार अप्रत्याशित है, आप बस इतना कह सकते हैं कि ऑब्जेक्ट्स बी और सी केवल कचरा संग्रह

1

मुझे लगता है कि तर्क अलग है। यदि वस्तु धागे से सुलभ नहीं है तो इसे एकत्र किया जा सकता है।

6

हां, बी और सी कचरे के संग्रह के लिए योग्य हैं, अगर उन्हें किसी भी जीसी रूट से नहीं पहुंचाया जा सकता है (जीसी जड़ों आमतौर पर सभी धागे और ढेर पर सभी संदर्भ होते हैं)।

+0

...और सभी स्थैतिक चर –

+3

@ मॉरीस: सीधे नहीं, जहां तक ​​मुझे पता है। स्थैतिक चर को 'कक्षा' के माध्यम से पहुंचा जा सकता है, जिसे 'क्लासलोडर' के माध्यम से पहुंचाया जा सकता है, जिसे लोड किया गया है, जिसे लोड किया गया अन्य वर्गों के माध्यम से पहुंचा जा सकता है जिसे उस प्रकार की वस्तुओं के माध्यम से पहुंचा जा सकता है। तो यदि 'क्लासलोडर' जीसीड है, तो आप एक स्थिर चर के मूल्य को भी खो सकते हैं। –

+0

आप ठीक से –

1

है कि अगर कोई आपत्ति का कोई संदर्भ नहीं है के माध्यम से वस्तु बी और सी तक पहुंचने के लिए कोई रास्ता नहीं है क्योंकि वहाँ है, तो यह जीसी आगे बढ़ने के लिए

2

में उपयुक्त हो जाएगा वास्तव में, जावा में कचरा संग्रह एक बहुत ही परिष्कृत चीज है, जो एक उदाहरण के रूप में रूबी दुभाषिया से कहीं अधिक है।

वैसे भी, सैद्धांतिक आधार समान है।

जीसी ऑब्जेक्ट ग्राफ़ की पहचान करता है जो प्रोग्राम कोड द्वारा अधिक पहुंच योग्य नहीं है (जिसका कहना है कि उनके पास सक्रिय कोड में कोई संदर्भ नहीं है)। ऑब्जेक्ट ग्राफ़ के बारे में बात करते समय, मैं ठीक से बी-> सी ऑब्जेक्ट ग्राफ़ के बारे में बात करता हूं। एक बार यह पहुंचने योग्य नहीं है, यह जीसी'एड हो सकता है, लेकिन आप यह नहीं बता सकते कि यह कब होगा, जीसी के आवेदन को धीमा करने से बचने के लिए जितना संभव हो सके अनुकूलित करने की कोशिश कर रहा है।

2

बी और सी कचरा संग्रह के लिए पात्र हैं क्योंकि आप उन्हें और अधिक नहीं पहुंच सकते हैं। कचरा कलेक्टर की अप्रत्याशितता के साथ हम सभी जानते हैं कि भविष्य में किसी बिंदु पर उन्हें एकत्रित होने की संभावना है।

0

B इसे करने के लिए कोई संदर्भ तो यह कचरा पहले एकत्र किया जाएगा, तो यह समझ जायेंगे कि C इसे करने के लिए कोई संदर्भ है, तो C कचरा एकत्र किया जाएगा है। यह चित्रण के लिए है, जेवीएम एक स्वीप में उन्हें स्कूप करने के लिए पर्याप्त स्मार्ट है।

+2

यह बताने का कोई तरीका नहीं है कि बी को पहले gc'ed किया जाएगा, यानी आपके पास बी और सी में अंतिमकरण कोड नहीं होना चाहिए जो उस क्रम पर निर्भर करता है। जीसी संदर्भों की गणना नहीं करता है, लेकिन पहुंच के लिए जांच करता है। यदि बी और सी दोनों तक नहीं पहुंचा जा सकता है, तो वे समान रूप से पहुंच योग्य नहीं हैं। –

4

सामान्य रूप से, यह article जो भी समझना चाहता है कि कचरा संग्रह क्या करना चाहता है। यह अच्छी तरह लिखा है और व्याख्यात्मक चित्र हैं।

+0

लिंक खोलकर, मुझे एक उपयोगकर्ता नाम और पासवर्ड चाहिए। – JordyOnrust

+0

आह, एफ़टीपी फिर से हमला करता है। मैंने अपनी पोस्ट संपादित की है, एक और लिंक जो बेहतर काम करना चाहिए। एक पीडीएफ संस्करण भी है। –

+0

@ ब्राइट010957: तादा! https://ritdml.rit.edu/dspace/bitstream/1850/5112/1/PWilsonProceedings1992.pdf –

संबंधित मुद्दे