डैरेन थॉमस एक अच्छा जवाब देता है। हालांकि, जावा और पायथन दृष्टिकोण के बीच एक बड़ा अंतर यह है कि सामान्य मामले में संदर्भ गिनती के साथ (कोई परिपत्र संदर्भ नहीं) ऑब्जेक्ट्स को बाद में कुछ अनिश्चित तारीख के बजाय साफ कर दिया जाता है।
उदाहरण के लिए, मैं CPython में लापरवाह, गैर पोर्टेबल कोड लिख सकते हैं इस तरह के
def parse_some_attrs(fname):
return open(fname).read().split("~~~")[2:4]
और उस फ़ाइल मैं खोला के लिए फ़ाइल वर्णनकर्ता के रूप में खुला करने के लिए संदर्भ के रूप में तुरंत क्योंकि जैसे ही साफ हो जाएगा फ़ाइल दूर हो जाती है, फ़ाइल कचरा इकट्ठा होती है और फ़ाइल डिस्क्रिप्टर मुक्त हो जाता है। बेशक, अगर मैं ज्योथन या आयरनपीथन या संभवतः पीपीपी चलाता हूं, तो कचरा कलेक्टर तब तक जरूरी नहीं होगा जब तक कि बाद में नहीं चलता; संभवतः मैं पहले फाइल डिस्क्रिप्टर से बाहर हो जाऊंगा और मेरा प्रोग्राम क्रैश हो जाएगा।
तो तुम लिखने चाहिए कोड है कि लग रहा है
तरह
def parse_some_attrs(fname):
with open(fname) as f:
return f.read().split("~~~")[2:4]
लेकिन कभी कभी लोगों को संदर्भ गिनती पर भरोसा करने की हमेशा अपने संसाधनों को मुक्त, क्योंकि यह कभी कभी अपने कोड में थोड़ा छोटा कर सकते हैं पसंद है।
मैं कहूंगा कि सबसे अच्छा कचरा कलेक्टर सबसे अच्छा प्रदर्शन वाला है, जो वर्तमान में जावा-स्टाइल जनरेशन कचरा कलेक्टरों के रूप में प्रतीत होता है जो एक अलग थ्रेड में चला सकते हैं और इन सभी पागल अनुकूलन आदि हैं। आप अपना कोड कैसे लिखते हैं इस पर मतभेद नगण्य और आदर्श रूप से मौजूद नहीं होना चाहिए।
स्रोत
2008-08-22 12:40:03
ध्यान देने योग्य एक अतिरिक्त अंतर यह है कि संदर्भ हमेशा गिनती के माध्यम से उत्सुक जीसी उपयोग करता है "कम से कम" स्मृति (सर्कुलर निर्भरता मामले को छोड़कर), जबकि जावा के आलसी दृष्टिकोण अस्थायी रूप से कहीं अधिक स्मृति वास्तव में जरूरत की तुलना में उपयोग करने के लिए JVM कारण हो सकता है, एक जब तक है जीसी रन इसे वापस लाइन में लाता है। जावा का दृष्टिकोण स्मृति की लागत पर गति देता है, और जब स्मृति भरपूर मात्रा में होता है तो इसका लाभ होता है। जब यह दुर्लभ होता है, तो पाइथन का दृष्टिकोण बेहतर काम करेगा। –
दो अन्य कारणों के लिए संदर्भ गणना गिन/स्वीप जीसी से धीमी है: 1. संदर्भ गणनाओं को अद्यतन करने के लिए स्मृति लिखती है और समेकन की आवश्यकता होती है क्योंकि उन्हें सिंक्रनाइज़ेशन की आवश्यकता होती है। 2. संदर्भ गणना स्वयं अतिरिक्त स्मृति का उपयोग करती है, जो ऑब्जेक्ट आकार बढ़ाती है और इसलिए कैश दबाव में जोड़ती है। – mikera