網搜結果: 1、
迴圈引用(circular references)
— ie瀏覽器的com元件產生的物件例項和網頁指令碼引擎產生的物件例項相互引用,就會造成記憶體洩漏。
這也是web頁面中我們遇到的最常見和主要的洩漏方式;
舉例:
dom物件與js物件相互引用。範例:
function encapsulator(element)
new encapsulator(document.getelementbyid('mydiv'));
解決方法:
在onunload事件中寫上: document.getelementbyid('mydiv').myprop = null;
2、內部函式引用(closures)
— closures可以看成是目前引起大量問題的迴圈應用的一種特殊形式。由於依賴指定的關鍵字和語法結構,
closures呼叫是比較容易被我們發現的;
舉例:a、給dom物件新增的屬性是乙個物件的引用。範例:
var myobject = {};
document.getelementbyid('mydiv').myprop = myobject;
解決方法:
在window.onunload事件中寫上: document.getelementbyid('mydiv').myprop = null;
b、給dom物件用attachevent繫結事件。範例:
function doclick() {}
element.attachevent("onclick", doclick);
解決方法:
在onunload事件中寫上: element.detachevent('onclick', doclick);
3、頁面交叉洩漏(cross-page leaks)
— 頁面交叉洩漏其實是一種較小的洩漏,它通常在你瀏覽過程中,由於dom插入順序引起。下面我們
會討論dom插入順序的問題,在那個示例中你會發現只需要改動少量的**,我們就可以避免物件薄計對物件構建帶來的影響;
舉例:
var parentdiv = document.createelement("div");
var childdiv = document.createelement("div");
解決方法:
var parentdiv = document.createelement("div");
var childdiv = document.createelement("div");
4、貌似洩漏(pseudo-leaks)
— 這個不是真正的意義上的洩漏,不過如果你不了解它,你可能會在你的可用記憶體資源變得越來越少的時候很鬱悶
舉例:反覆重寫同乙個屬性會造成記憶體大量占用(但關閉ie後記憶體會被釋放)。範例:
for(i = 0; i < 5000; i++)
這種方式相當於定義了5000個屬性!
解決方法:
其實沒什麼解決方法:p~~~就是程式設計的時候盡量避免出現這種情況咯~~
參考文章:
記憶體洩漏和記憶體溢位 記憶體洩漏和記憶體溢位
記憶體洩漏 是指申請的記憶體空間使用完畢之後未 一次記憶體洩露危害可以忽略,但若一直洩漏,無論有多少記憶體,遲早都會被占用光,最終導致程式crash。因此,開發中我們要盡量避免記憶體洩漏的出現 記憶體溢位 是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用。通俗理解就是記憶體不夠用了,通常在執行大...
wxWidgets delete記憶體洩漏
定義乙個結構typedef tag struct customnode struct,再定義乙個wxarrayptrvoid m nodearray 在程式的初始化過程裡 for wxint32 i 0 i 5 i node struct ptemp new node struct ptemp a ...
PHP記憶體洩漏
如果php物件存在遞迴引用,就會出現記憶體洩漏。這個bug在php裡已經存在很久很久了,先讓我們來重現這個bug,如下 class foo class bar for i 0 i 100 i 執行以上 你會發現,記憶體使用量本應該不變才對,可實際上卻是不斷增加,unset沒有完全生效。現在的開發很多...