एक वरिष्ठ डेवलपर हैं जो भाषाओं का एक बहुत में इस चीज के लिए एक लंबे समय कर रहा है के रूप में, यहाँ मेरे विचार है:
जबकि मुझे लगता है कि जब इस तरह के सी के रूप में एक संकलित भाषा का प्रयोग कर अपने इरादे अच्छा है, सुक्ष्म डेवलपर नियंत्रित नियंत्रण प्रबंधन फिट नहीं है कि रूबी, पायथन और पर्ल जैसी चीजें कैसे काम करती हैं।
पर्ल, रुबी और पायथन जैसे स्क्रिप्टिंग भाषाएं हमें स्मृति प्रबंधन की चिंताओं से प्रेरित करती हैं। यही कारण है कि हम उन्हें पसंद करते हैं। अगर हमारे पास स्मृति उपलब्ध है, तो वे काम पूरा करने के लिए उन्हें जो चाहिए उसे उपयोग करेंगे। मेमोरी मैनेजमेंट कंट्रोल का नुकसान विकास की गति और डिबगिंग में आसानी के लिए एक व्यापार है; हमारे पास यह नहीं है, और इसके बारे में चिंता करने की आवश्यकता नहीं है। अगर मुझे इसकी ज़रूरत है तो मैं सी या असेंबली भाषा का उपयोग करूंगा।
जहां तक यह माना जाता है कि यह एक स्मृति रिसाव है, ठीक है, मुझे लगता है कि यह थोड़ा सा मूर्ख या अजीब है। आपके जैसा एक स्मृति रिसाव उल्लेखनीय रिसाव होगा, और, जैसा कि रूबी आधारित ऐप्स और साइट्स के साथ हैं, किसी ने इसे बहुत समय पहले देखा होगा। इसलिए, जब मैं कुछ ऐसा समझता हूं जो मुझे समझ में नहीं आता है, तो मुझे हमेशा लगता है कि मैं अपने कोड में कुछ गलत कर रहा हूं, तो मैं कुछ काम करता हूं, और यदि मैं वे अभी भी ध्वनि लगते हैं, मैं उन अन्य लोगों की तलाश करूंगा जिनके पास समान समस्याएं हैं और देखें कि उनके पास समाधान हैं या नहीं। और, यदि समस्या ऐसी चीज है जो भाषा के लिए महत्वपूर्ण होगी, तो मैं स्रोत में खोदूँगा या कुछ मूल डेवलपर्स से बात करूंगा और पूछूंगा कि मैं जो देख रहा हूं उसके साथ पागल हूं। मुझे पहले निम्न स्तर की बग मिली है लेकिन वे कोने के मामले हैं, और मैंने कुछ भी उल्लेख करने से पहले चार दिनों में खुदाई की, क्योंकि मैं एक ऐसे साथी की तरह नहीं बनना चाहता था जो एक बग रिपोर्ट दर्ज करे एप्पल के साथ तुरंत, फिर पता लगाएं कि यह उसके कोड में एक बग था।
एक डेलोकेशन पर सिस्टम को वापस लौटने के बारे में मेरी समग्र सोच, क्या यह अतिरिक्त ओवरहेड को घुमाता है जिसे अगले ऑपरेशन में सीपीयू चक्रों को बर्बाद कर दिया जा सकता है, जिसका अर्थ है और व्याख्यान भाषाएं बर्दाश्त नहीं कर सकती हैं क्योंकि वे तेज़ नहीं हैं संकलित भाषाओं के साथ शुरू करने के लिए। मुझे लगता है कि भाषा के लिए यह एक उचित बात है कि इसे बार-बार स्मृति के बड़े ब्लॉक को आवंटित करने की आवश्यकता होगी यदि इसे एक बार करना है, खासकर रुबी जैसे ओओ भाषा के साथ। उस बिंदु पर यह पहले इस्तेमाल की गई स्मृति को पकड़ने के लिए बहुत समझ में आता है।
और, चीजों की बड़ी योजना में, उस आकार के 1,000,000 सरणी तत्वों को आवंटित करने से यह बहुत मेमोरी नहीं है कि हम नियमित रूप से हमारे बक्से में कितना स्वतंत्र हैं। मैं स्मृति में एक सरणी में 1,000,000 तत्वों को बनाए रखने की आवश्यकता के बारे में अधिक चिंतित हूं और एक सहकर्मी को सलाह दूंगा कि उन्हें डेटाबेस का उपयोग करने पर गंभीरता से देखना चाहिए। आपके पास इसे रैम में रखने के लिए एक अच्छा व्यावसायिक कारण हो सकता है। यदि ऐसा है, तो होस्ट पर रैम अधिकतम करें और आपको ठीक होना चाहिए।
मुझे नहीं पता, लेकिन मुझे लगता है कि रूबी उस स्मृति को पुन: उपयोग करने के लिए पूल कर रही है, यह चीजों को करने का एक सुंदर मानक तरीका है। – falstro
अगर कोई एडम के कोड को डुप्लिकेट कर सकता है, लेकिन दिखाता है कि ऑब्जेक्ट्स के सृजन को हटाने और हटाने से कई बार स्मृति उपयोग में वृद्धि नहीं होती है, जो सवाल का जवाब देने में मदद करेगा। –
मेमोरी मुक्त: 1000000.times {| i | एक || = []; एक [i.to_s] = i; @ A.delete (i); GC.start; पी ऑब्जेक्टस्पेस.count_objects} –