2010-05-06 21 views
5
package uk.co.bigroom.utils 
{ 
    import flash.utils.Dictionary; 
    /** 
    * Class to create a weak reference to an object. A weak reference 
    * is a reference that does not prevent the object from being 
    * garbage collected. If the object has been garbage collected 
    * then the get method will return null. 
    */ 
    public class WeakRef 
    { 
     private var dic:Dictionary; 

     /** 
     * The constructor - creates a weak reference. 
     * 
     * @param obj the object to create a weak reference to 
     */ 
     public function WeakRef(obj:*) 
     { 
      dic = new Dictionary(true); 
      dic[obj] = 1; 
     } 

     /** 
     * To get a strong reference to the object. 
     * 
     * @return a strong reference to the object or null if the 
     * object has been garbage collected 
     */ 
     public function get():* 
     { 
      for (var item:* in dic) 
      { 
       return item; 
      } 
      return null; 
     } 
    } 
} 

इस कक्षा में, वे एक को कमजोर संदर्भ के रूप में और एक को मजबूत संदर्भ के रूप में कैसे दर्शाते हैं।कमजोर संदर्भ और मजबूत संदर्भ

उत्तर

4

कक्षा स्वयं एक कमजोर संदर्भ को अनुकरण करती है, और इसे एक के रूप में पारित किया जा सकता है।
यदि मूल्य के लिए कोई अन्य कमजोर संदर्भ नहीं है, तो यह कचरा इकट्ठा किया जाता है, क्योंकि इसका संदर्भ कमजोर (संदर्भ) कुंजी के साथ एक शब्दकोश के माध्यम से स्थापित किया जाता है।

जैसे ही आप मूल्य प्राप्त करते हैं, आप ऑब्जेक्ट का संदर्भ प्राप्त करते हैं, जो कि एक्शनस्क्रिप्ट में सभी प्रत्यक्ष ऑब्जेक्ट संदर्भों की तरह एक मजबूत संदर्भ है। जब तक आप उस संदर्भ को रखते हैं, तब तक वस्तु एकत्रित कचरा नहीं होगी।

संपादित करें:
कमजोर और मजबूत संदर्भ के बीच
अंतर एक कार्यक्रम के निष्पादन के दौरान, स्मृति में कामयाब होने की जरूरत है। निम्न स्तर की भाषाओं के लिए आपको मैन्युअल रूप से स्मृति आवंटित करने की आवश्यकता होती है (मुक्त स्थान प्राप्त करें) और इसे मुक्त करें, जब ऑब्जेक्ट की आवश्यकता नहीं है। उच्च स्तर की भाषाएं कचरा संग्रह का उपयोग करती हैं। यह एक ऐसी प्रणाली है जो निर्धारित करने की कोशिश करती है कि क्या वस्तुओं की अभी भी आवश्यकता है, या "कचरा" है, यानी उन्हें छोड़ दिया जा सकता है, उन्हें आवश्यक स्मृति को मुक्त कर सकते हैं। यह निर्धारित करने के लिए कि क्या किसी ऑब्जेक्ट की आवश्यकता है, कचरा कलेक्टर अन्य ऑब्जेक्ट्स को खोजने का प्रयास करता है, जो इस ऑब्जेक्ट को "जानता है", यानी इसका संदर्भ है। जब किसी ऑब्जेक्ट को अन्य ऑब्जेक्ट्स द्वारा संदर्भित किया जाता है, तो इसे बनाए रखा जाता है (वास्तव में यह नहीं है, क्योंकि अन्यथा बिना संदर्भित वस्तुएं एक-दूसरे को चक्रीय रूप से संदर्भित कर सकती हैं, लेकिन आइए विवरणों में बहुत अधिक जानकारी न दें)।
इस प्रकार किसी वस्तु को "जानना"/संदर्भित करना "इसे जीवित रखना" का दुष्प्रभाव होता है, क्योंकि इसे हटाया नहीं जा सकता है। कभी-कभी, इस दुष्प्रभाव को नहीं माना जाता है। उदाहरण के लिए, यदि आपको त्वरित पहुंच के लिए कुछ समय की सभी मौजूदा वस्तुओं की एक सूची की आवश्यकता है, तो यह सूची उन्हें छोड़ने से रोकती है, भले ही वह सूची केवल उन संदर्भों को रखने के लिए एकमात्र वस्तु है। यही कारण है कि सामान्य संदर्भों के विपरीत कमजोर संदर्भ हैं जिन्हें "मजबूत" के रूप में भी पेश किया जा सकता है क्योंकि वे वस्तु को कचरा इकट्ठा करने से रोकते हैं। कमजोर संदर्भ आपको किसी वस्तु का संदर्भ देने की अनुमति देते हैं, लेकिन कचरा कलेक्टर द्वारा अनदेखा किया जाता है। ऊपर वर्णित मामले में यह अक्सर बहुत उपयोगी हो सकता है।

greetz
back2dos

+0

तुम मुझे कमजोर और मजबूत संदर्भ के लिए परिभाषा दे सकते हैं। मैं पाने में सक्षम नहीं हूँ। क्षमा करें – Kevin

+0

@theband: कृपया मेरा अपडेट देखें। साथ ही, आप अधिक जानकारी के लिए http://en.wikipedia.org/wiki/Reference_counting#Use_in_garbage_collection की जांच कर सकते हैं। – back2dos

+0

अद्यतन के लिए बहुत कुछ धन्यवाद – Kevin