2009-01-09 8 views
7

यदि मेरे पास एक दूसरे के संदर्भ में ढेर पर दो वस्तुएं हैं लेकिन वे किसी भी संदर्भ चर से लिंक नहीं कर रहे हैं तो क्या वे वस्तुएं कचरा संग्रह के लिए योग्य हैं?पृथक चक्रीय संदर्भों के साथ कचरा संग्रहण व्यवहार?

उत्तर

20

हाँ, वे कर रहे हैं की जाँच कर सकते हैं। मूल रूप से जीसी उन वस्तुओं को खोजने के लिए "ज्ञात जड़ों" (स्थैतिक चर, सभी स्टैक फ्रेम से स्थानीय चर) से चलती है जो कचरा नहीं हो सकता है। यदि किसी ऑब्जेक्ट को रूट से प्राप्त करने का कोई तरीका नहीं है, तो यह संग्रह के लिए योग्य है।

संपादित करें: टॉम यह पता है, जो मैंने सोचा था कि इस सवाल का जवाब ही में उठाने लायक था कहा:

तकनीकी तौर पर, स्थैतिक चर जड़ों नहीं हैं - वे कक्षाओं जो वर्ग लोडर द्वारा संदर्भित कर रहे हैं के द्वारा संदर्भित कर रहे हैं जिन्हें कक्षाओं द्वारा संदर्भित किया जाता है जो ऑब्जेक्ट द्वारा संदर्भित हैं जो रूट संदर्भों द्वारा संदर्भित हैं।

अंतर अप्रासंगिक समय की सबसे होने की संभावना है, लेकिन यह :)

+0

तकनीकी रूप से, स्थैतिक चर जड़ें नहीं हैं - उन्हें कक्षाओं द्वारा संदर्भित किया जाता है जिन्हें कक्षा लोडर द्वारा संदर्भित किया जाता है जिन्हें कक्षाओं द्वारा संदर्भित किया जाता है जिन्हें ऑब्जेक्ट द्वारा संदर्भित किया जाता है जिसे रूट संदर्भों द्वारा संदर्भित किया जाता है। –

+0

@ टॉम: अच्छी कॉल। संपादन... –

4

स्कीट पैसे पर की जानना अच्छा है, हमेशा की तरह। मैं केवल यह जोड़ूंगा कि आपके द्वारा वर्णित स्थिति का कारण है कि संदर्भ गणना (प्रारंभिक सी ++ स्मार्ट पॉइंटर्स के साथ एक मानक रणनीति) का उपयोग नहीं किया जाता है।

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