2013-12-11 6 views
5

ऐसा कहा जाता है कि परमाणु कचरे को एकत्र नहीं किया जाता है। एक बार जब आप परमाणु बना लेते हैं, तो यह परमाणु तालिका में रहता है, जो दिन के अंत में स्मृति रिसाव का कारण बन सकता है!कैसे Erlang परमाणु कचरा इकट्ठा किया जा सकता है

मैं एरलांग के लिए बिल्कुल नया हूं, और मेरा सवाल यह है कि परमाणु कचरा कैसे एकत्र किया जा सकता है? और यदि संभव नहीं है, तो उस प्रभाव को कम करने के लिए कैसे?

उत्तर

10

परमाणु तब तक जारी नहीं हैं जब तक कि आप उन्हें गतिशील रूप से नहीं बना रहे। यदि आपने ऐसा किया है, तो आप एरलांग सिस्टम को क्रैश करने के अपने रास्ते पर हैं।

गतिशील रूप से परमाणु कैसे बनाएं? उदाहरण के लिए list_to_atom लूप के अंदर फ़ंक्शन कॉल करना।

यदि आप एर्लांग कचरा संग्रह में रूचि रखते हैं, तो जो आर्मस्ट्रांग द्वारा इस पेपर को पढ़ें: One Pass Real-Time Generational Mark-Sweep Garbage Collection (1995)

हमेशा ध्यान रखें: परमाणुओं को गतिशील रूप से न बनाएं!
कभी-कभी आपको एटम गतिशील रूप से बनाने की आवश्यकता हो सकती है लेकिन इसका उपयोग न करें!

+0

आपके उत्तर के लिए धन्यवाद। मेरा सवाल है: यदि ऐसा हुआ और मैंने उन्हें गतिशील रूप से उपयोग किया, तो मैं उनकी याददाश्त कैसे मुक्त कर सकता हूं? – securecurve

+3

मैं गलत हो सकता हूं लेकिन मुझे डर है कि आप वास्तव में नहीं कर सकते हैं। – Chiron

+1

आपके पास स्मृति रिसाव का बहुत कम जोखिम है, क्योंकि विभिन्न परमाणुओं की संख्या सीमित है। इसलिए आपके पास मेमोरी खपत की समस्या होने से पहले इस समस्या को हिट करेगा (डिफ़ॉल्ट रूप से परमाणु की अधिकतम संख्या '1 048 576' है) – Pascal

4

जबकि मुझे यकीन नहीं है कि परमाणु कचरे से एकत्र हुए हैं, तो आप चिंता किए बिना आसानी से कर सकते हैं कि आप सिस्टम की स्मृति को उड़ा देंगे या नहीं। जैसा कि @ चेरॉन ने कहा, जब तक आपके सभी परमाणु संकलन समय पर ज्ञात हैं, आपको ठीक होना चाहिए।

क्या होगा यदि मुझे वास्तव में list_to_atom/1 किसी भी तरह उपयोग करने की आवश्यकता है?

atom("apple") -> apple; 
atom("orange") -> orange; 
atom("banana") -> banana. 

एक अन्य वैकल्पिक हल list_to_existing_atom/1

है लेकिन वीएम अभी भी अधिक से अधिक रैम खा सकते हैं: अन्य जुड़े Erlang नोड्स परमाणुओं पंजीकृत कर सकते हैं ठीक है, तुम समारोह के इस प्रकार उपयोग करके अपनी समस्या मोड़ करने में सक्षम हो सकता है वैश्विक रूप से, यह रन टाइम पर परमाणु आवंटित किया जाता है।

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