कचरा से बचने अपेक्षाकृत सीधे आगे है। आपको यह समझने की जरूरत है कि आवंटन कहां किए जा रहे हैं और देखें कि क्या आप आवंटन से बच सकते हैं।
सबसे पहले, किसी फ़ंक्शन की शुरुआत में घोषित चर सक्षम नहीं होंगे। कंपाइलर अंतर नहीं जानता है। हालांकि, इंसानों को अंतर पता होगा और इससे उन्हें परेशान होगा।
स्लाइस के बजाय एक सरणी का उपयोग काम करेगा, लेकिन ऐसा इसलिए है क्योंकि सरणी (जब तक कि संदर्भित नहीं किया जाता) को ढेर पर रखा जाता है। Arrays के पास अन्य मुद्दों जैसे तथ्य यह है कि वे कार्यों के बीच मूल्य (प्रतिलिपि) द्वारा पारित कर रहे हैं। ढेर पर कुछ भी "कचरा नहीं है" क्योंकि समारोह वापस आने पर इसे मुक्त किया जाएगा। फ़ंक्शन से बचने वाले किसी भी पॉइंटर या स्लाइस को ढेर पर रखा जाता है जिसे कचरा कलेक्टर को किसी बिंदु पर सौदा करना चाहिए।
सबसे अच्छी बात यह है कि आप आवंटन से बच सकते हैं। जब आप डेटा के बड़े बिट्स के साथ काम करते हैं, जिनकी आपको आवश्यकता नहीं होती है, तो उनका पुन: उपयोग करें। यह गो ब्लॉग पर profiling tutorial में उपयोग की जाने वाली विधि है। मैं इसे पढ़ने का सुझाव देता हूं।
प्रोफाइलिंग ट्यूटोरियल में से एक के अलावा एक और उदाहरण: मान लें कि आपके पास []int
नाम का एक टुकड़ा xs
है। जब तक आप किसी शर्त तक नहीं पहुंच जाते हैं तब तक आप लगातार []int
में संलग्न होते हैं और फिर आप इसे रीसेट करते हैं ताकि आप शुरू कर सकें। यदि आप xs = nil
करते हैं, तो अब आप कटाई के अंतर्निहित सरणी को कचरा इकट्ठा करने के रूप में घोषित कर रहे हैं। अगली बार जब आप इसका इस्तेमाल करेंगे तो संलग्न करें xs को फिर से आवंटित करेंगे। यदि आप xs = xs[:0]
करते हैं, तो भी आप इसे रीसेट कर रहे हैं लेकिन पुराने सरणी को रखते हुए।
अधिकांश भाग के लिए, कचरा बनाने से बचने की कोशिश करना समयपूर्व अनुकूलन है। आपके अधिकांश कोड के लिए इससे कोई फर्क नहीं पड़ता। लेकिन आप एक बार कुछ समय में एक समारोह को पा सकते हैं जिसे कई बार कहा जाता है जो हर बार चलाने के लिए आवंटित करता है। या एक लूप जहां आप पुन: उपयोग करने के बजाय पुन: आवंटित करते हैं। जब तक आप ओवरबोर्ड पर जाने से पहले बोतल की गर्दन नहीं देखते हैं तब तक मैं इंतजार करूंगा।
स्रोत
2012-09-05 19:18:07
मुझे लगता है कि आपको इस तरह के किसी भी अनुकूलन करने से पहले प्रोफाइल करना चाहिए। [यह] देखें (http://blog.golang.org/2011/06/profiling-go-programs.html) प्रोफाइलिंग के बारे में ब्लॉग प्रविष्टि। वे कचरा संग्रह को भी अनुकूलित करते हैं। एक अच्छी शुरुआत होनी चाहिए? – Christian
यह क्यों बंद है? प्रश्न: कचरा संग्रह से कैसे बचें? ढेर आवंटन से बचें (विशिष्ट संदर्भित उदाहरणों के साथ)। प्रश्न प्रासंगिक और विशिष्ट है और उत्तर बहस योग्य प्रतीत नहीं होता है। – user634175