दिलचस्प पोस्ट
शेल स्क्रिप्ट में $ @ का अर्थ क्या है? NSURL सत्र में स्विफ्ट में JSON को कैसे पार्स करना क्या आप किसी शाखा में या ट्रंक में विकास जारी रखते हैं? "कम अवस्थापन" और परिवर्तन योग्य डिफ़ॉल्ट तर्क लिंक करने के लिए NHibernate कैसे जांचने के लिए कि क्या mod_rewrite सर्वर पर सक्षम है? जब मैं एक सरणी के अंत से परे लिखता हूं तो मुझे एक विभाजन त्रुटि क्यों नहीं मिलती? php preg_replace regex जो कई लाइनों से मेल खाता है जावास्क्रिप्ट / jquery का उपयोग करते हुए मौजूदा वेबपेज के स्क्रीन शॉट कैसे लें मौजूदा वाईफाई हॉटस्पॉट नाम को प्राप्त करने के लिए मैं कैप्टिव नेटवर्क का उपयोग कैसे करूं? स्प्रिंगबूट सुरक्षा हैरोल काम नहीं कर रहा है JQuery का उपयोग कर मल्टी-लाइन स्ट्रिंग डालें कैसे जावा में एक फ़ोल्डर बनाने के लिए? सी ++ बहुत बड़े पूर्णांकों से निपटने अगर कोई फ़ंक्शन किसी वैध रिटर्न प्रकार के साथ कोई मान नहीं देता है, क्या कचरा को फेंकने के लिए क्या यह ठीक है?

उद्देश्य-सी स्वत: संदर्भ गणना और कचरा संग्रहण के बीच अंतर क्या है?

Xcode 4.2 में पेश की गई नई स्वचालित संदर्भ गणना (एआरसी) के साथ, हमें ऑब्जेक्टिव-सी में मैन्युअल रूप से बनाए रखने / रिलीज करने की आवश्यकता नहीं है।

यह कचरा संग्रहण के समान है, जैसा कि मैक पर उद्देश्य-सी में और अन्य भाषाओं में किया गया है। एआरसी कचरा संग्रह से कैसे भिन्न है?

Solutions Collecting From Web of "उद्देश्य-सी स्वत: संदर्भ गणना और कचरा संग्रहण के बीच अंतर क्या है?"

संक्षिप्त और मिठाई उत्तर का अनुसरण है:

जावा का जीसी रनटाइम है, जबकि एआरसी संकलन समय है।

जीसी रनटाइम पर वस्तुओं के संदर्भ में है और ऑब्जेक्ट रनटाइम की निर्भरता की जांच करता है। जबकि एआरसी रिलीज को जोड़ता है, फिर भी, कॉम्पलेटाइम पर ऑटोरेक्लीज कॉल करता है।

जैसा कि मैंने अपने उत्तर में वर्णित किया है , एआरसी मैनुअल मेमोरी प्रबंधन और कूड़ा संग्रह को ट्रेसिंग दोनों का सर्वोत्तम प्रदान कर सकता है। यह मुख्यतः उद्देश्य-सी ऑब्जेक्ट पर मैन्युअल बनाए रखने, रिलीज और ऑटोरेल्स को ट्रैक करने के लिए डेवलपर की आवश्यकता को हटा देता है, फिर भी एक कचरा कलेक्टर प्रक्रिया की आवश्यकता से बचा जाता है जो कि मोबाइल डिवाइस पर सीमित संसाधनों का उपयोग कर सकता है और चलने वाले एप्लिकेशन में कभी-कभार स्टुटर्स का कारण बन सकता है ।

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

एक मामूली फायदा यह है कि एआरसी से कूड़ा संग्रह का पता लगाया जा रहा है कि एआरसी आपके लिए चक्र बनाए रखने के साथ सौदा नहीं करेगा , जहां कचरा संग्रहण का पता लगाया जा सकता है।

विषय पर एक महान पढ़ा इस धागे से एप्पल के उद्देश्य-सी मेलिंग सूची पर आता है, जहां क्रिस लेट्टनर ने यह कहा है:

एआरसी पर जीसी का प्राथमिक लाभ यही है कि यह चक्र बनाए रखता है एक माध्यमिक लाभ यह है कि "बनाए रखा" असाइनमेंट "परमाणु" हैं क्योंकि वे एक साधारण स्टोर हैं एआरसी के मुकाबले में बहुत अधिक लाभ हैं जीओसी:

  1. इसमें ऑब्जेक्ट के निर्धारण संबंधी निर्धारण (जब वस्तु के पिछले मजबूत संदर्भ को दूर जाता है) है, जहां जीसी वस्तु "कुछ समय बाद में" को मुक्त करती है। यह उन सूक्ष्म बगों की एक कक्षा को परिभाषित करता है जो जीसी एप्लिकेशन में मौजूद हो सकते हैं जो कि उजागर नहीं हैं क्योंकि कलेक्टर "छोटी गाड़ी विंडो में" ट्रिगर नहीं करता है
  2. उच्च पानी का निशान आमतौर पर जीसी की तुलना में एआरसी के साथ बहुत कम होता है क्योंकि वस्तुओं को जल्द ही जारी किया जाता है।
  3. libauto एक नाजुक प्रोग्रामिंग मॉडल प्रदान करता है, आपको सावधान रहना होगा कि वह लिखने की बाधाओं को न खोए।
  4. नहीं सभी प्रणाली के ढांचे के जीसी को साफ कर रहे हैं, और चौखटे कभी-कभी उभरते हैं जैसे वे विकसित होते हैं।
  5. एआरसी झूठी जड़ों से ग्रस्त नहीं है लिबॉटो कंजर्वेटिव स्कैन को स्कैन करता है, जिसका अर्थ है कि सूचक जो ऑब्जेक्ट ग्राफ़ को रूट कर सकते हैं।
  6. एआरसी में कुछ भी ऐसा नहीं है जो कि किक करता है और आपके ऐप को रोक देता है, जिसके कारण यूआई स्टुटर्स होते हैं। जीओसी लागू होने के कारण libauto बहुत उन्नत है क्योंकि यह प्रत्येक धागा को तुरंत बंद नहीं करता है, लेकिन यह अभी भी सभी UI थ्रेड्स को रोकता है।

मैं वर्तमान में मेरी मैन्युअल रूप से मेमोरी प्रबंधित परियोजनाओं, और एआरसी को उद्देश्य-सी कूड़ा संग्रह का उपयोग करने वाले दोनों को माइग्रेट कर रहा हूं। थोड़ी देर के लिए कुछ मैक अनुप्रयोगों में कचरा संग्रह का उपयोग करने के बाद, मुझे एआरसी को इन परियोजनाओं को आगे बढ़ाने में कुछ महत्वपूर्ण लाभ मिलते हैं I

एआरसी कचरा संग्रह से कैसे भिन्न है?

एआरसी कचरा संग्रह का एक रूप है।

आप शायद "एआरसी और ट्रेसिंग कचरा संग्रह (जेवीएम और .नेट) के बीच अंतर क्या है?" मुख्य अंतर यह है कि एआरसी धीमी और लीक चक्र है यही कारण है कि जेवीएम और .नेट दोनों कूड़ा लेने वाले कलेक्टर्स का पता लगाने का उपयोग करते हैं। अधिक जानकारी के लिए, कृपया संदर्भ गिनती और कचरा संग्रह की तुलना कैसे करें ।

एआरसी एक संकलित समय "संदर्भित" ऑब्जेक्ट पर निर्भर करता है जो इसे कम-पावर मोड वाले वातावरण (मोबाइल डिवाइसेस) में सक्षम बनाता है।

जीसी एक रनटाइम आधारित "पहुंचने योग्य" ऑब्जेक्ट्स पर भरोसा करती है जो इसे बहु-थ्रेडेड परिवेश में कुशल बनाती हैं।

ऑपरेशन

एआरसी अपने संदर्भ गणना के आधार पर अप्रयुक्त वस्तुओं पर "स्वतः" निष्पादित करने के लिए निष्पादन योग्य में एक कोड को इंजेक्ट करता है

जीसी रनटाइम में काम करती है क्योंकि यह अप्रयुक्त ऑब्जेक्ट ग्राफ़ का पता लगाता है (बनाए रखने के चक्रों को समाप्त कर देगा) और उन्हें अनिश्चित समय अंतराल पर निकाल देगा

स्वचालित संदर्भ गणना का लाभ

  • वास्तविक समय, वस्तुओं का नियतात्मक विनाश क्योंकि वे अप्रयुक्त हो जाते हैं।
  • कोई पृष्ठभूमि प्रसंस्करण नहीं

कचरा संग्रहण का लाभ

  • जीसी संपूर्ण ऑब्जेक्ट ग्राफ़ को साफ कर सकता है, जिसमें चक्र बनाए रखना शामिल है
  • जीसी पृष्ठभूमि में आगे बढ़ता है, इसलिए कम स्मृति प्रबंधन का काम नियमित रूप से आवेदन प्रवाह के भाग के रूप में किया जाता है।

स्वचालित संदर्भ गिनती का नुकसान

  • एआरसी स्वचालित रूप से बनाए रखने के चक्रों को नियंत्रित नहीं कर सकता

कचरा संग्रहण का नुकसान

  • क्योंकि पृष्ठभूमि में जीसी होता है, ऑब्जेक्ट रिलीज़ के लिए सटीक समय सीमा अनिर्धारित होती है।
  • जब कोई जीसी होता है, तो आवेदन में अन्य थ्रेड्स अस्थायी रूप से होल्ड पर रखे जा सकते हैं।