actionscript 3 - perplexing garbage collection issue -


  1) var x1: X = नया एक्स (); 2) var x2: X = नया एक्स (); ... 3) x1.z = नया SWFLoader (...); ... 4) x2.z = x1.z; 5) x1.z = नल 6) x1 = नल;  

अंतिम वक्तव्य बेकार है क्योंकि कथन 4 की गारंटी देता है कि एक्स 1 और इसमें जो कुछ भी शामिल है, कभी भी कचरा एकत्र नहीं किया जाएगा जब तक x2.z मौजूद नहीं है। क्या किसी और को लगता है यह विचित्र है? यह मुझे एक ऐसा बड़ा झटका और दोष था जो मुझे करना था। क्या कोई उपाय बिल्कुल भी है?

एकमात्र कारण यह समझ में आता है कि एक्स 1 में सब कुछ संकीर्ण स्मृति या कुछ में संग्रहीत किया गया था, लेकिन जब आप कहते हैं कि "x1.z = नया ..." ज्यादातर भाषाओं में इसका अर्थ है कि यह जा रहा है और आवंटित कर रहा है कहीं और स्मृति का एक नया ब्लॉक और उस पर एक सूचक (एक सूचक जो बाद में x2.z को भी सौंपा गया है।) मैं हमेशा "संदर्भ" को "सूचक" के रूप में "संदर्भ" की व्याख्या करता था।

of पाठ्यक्रम कुछ कह सकते हैं, ठीक है आप अभी भी x1 में सभी को अलग-अलग हटा सकते हैं लेकिन यदि उपरोक्त बयान 4 के लिए नहीं है, तो बयान 6 सब कुछ को हटाने के लिए x1 में चिह्नित करेगा।

(ध्यान दें: फ्लैश प्लेयर को बताने का एकमात्र कारण मैं फ्लैश प्लेयर को बता रहा था "मुझे वास्तव में एक्स 1। जेज़ की परवाह नहीं है", लेकिन इसमें कोई फर्क नहीं पड़ा।)

अगर मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप कह रहे हैं कि निम्नलिखित कोड x1 लीक चाहिए। लेकिन यह नहीं है आप कैसे परीक्षण कर रहे हैं कि x1 संग्रह के लिए पात्र नहीं है? क्या आप कुछ कार्यशील कोड पोस्ट कर सकते हैं जो समस्या को दोहराता है?

  पैकेज {import flash.display.MovieClip; आयात करें flash.display.Sprite; आयात करें flash.net.URLLoader; आयात फ़्लैश। सिस्टम्स। सिस्टम; आयात फ़्लैश। Import flash.utils.setInterval; पब्लिक क्लास टेस्ट स्प्राइट का विस्तार करता है {निजी var _dict: शब्दकोश = नया शब्दकोश (सच); निजी var x1: फू; निजी var x2: फू; सार्वजनिक कार्य परीक्षण () {testGC (); SetInterval (फ़ंक्शन (): शून्य {ट्रेसकाउंट ();}, 100); } निजी फ़ंक्शन testGC (): शून्य {x1 = नया Foo (); X2 = नया फू (); _dict [x1] = सच; _dict [x2] = सच; X1.z = नया URL लोडर (); X2.z = x1.z; X1 = नल; } निजी फ़ंक्शन ट्रेस गणना (): शून्य {var संख्या: int = 0; प्रत्येक के लिए (var i: * in _dict) {count ++; } ट्रेस (गणना); System.gc (); }}} आयात करें flash.net.URLLoader; वर्ग फू {सार्वजनिक var z: URLLoader; }  

Comments