मैंने निम्नलिखित क्रोम बग को लॉग किया है , जिसके कारण मेरे कोड में कई गंभीर और गैर-स्पष्ट मेमोरी लीक हो गए हैं:
(ये परिणाम क्रोम देव टूल्स के मेमोरी प्रोफाइलर का उपयोग करते हैं , जो जीसी चलाता है, और फिर सब कुछ एकत्र नहीं किया जाता है।
नीचे दिए गए कोड में, someClass
कचरा एकत्र किया गया है (अच्छा):
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
लेकिन यह इस मामले (खराब) में एकत्रित कचरा नहीं होगा:
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
और इसी स्क्रीनशॉट:
ऐसा लगता है कि एक बंद (इस मामले में function() {}
) , सभी वस्तुओं को "जीवित" रखता है यदि वस्तु को उसी संदर्भ में किसी अन्य बंद द्वारा संदर्भित किया जाता है, चाहे वह बंद हो या न हो, वह भी पहुंच से बाहर है।
मेरा प्रश्न अन्य ब्राउज़रों (IE 9+ और फ़ायरफ़ॉक्स) में बंद होने के कचरा संग्रह के बारे में है। मैं वेबकिट के टूल से काफी परिचित हूं, जैसे कि जावास्क्रिप्ट हीप प्रोफाइलर, लेकिन मैं अन्य ब्राउज़रों के टूल के बारे में बहुत कम जानता हूं, इसलिए मैं इसका परीक्षण नहीं कर पाया।
IE9 + और फ़ायरफ़ॉक्स कचरा इन तीनों में से किस मामले में उदाहरण एकत्र करेगा someClass
?
unreachable
फ़ंक्शन को कभी निष्पादित नहीं किया जाता है, इसलिए वास्तव में कुछ भी लॉग नहीं किया जाता है।