js常見的內存泄漏


什么是內存泄漏

內存泄露是指當一塊內存不再被應用程序使用的時候,由於某種原因,這塊內存沒有返還給操作系統或者內存池的現象。內存泄漏可能會導致應用程序卡頓或者崩潰。

常見的內存泄漏

以上代碼創建了一個作為 element 元素事件處理程序的閉包,而這個閉包則又創建了一個循環引用,匿名函數中保存了一個對 element 對象的引用,因此無法減少 element 的引用數。只要匿名函數在,element 的引用數至少是 1,因此它所占用的內存就永遠無法回收。

解決辦法:

意外的全局變量

在 JavaScript 非嚴格模式中,未定義的變量會自動綁定在全局對象上(window/global),比如:

foo 執行的時候,由於內部變量沒有定義,所以相當於 window.bar = 'something',函數執行完畢,本應該被銷毀的變量 bar 卻永久的保留在內存中了。

 

解決辦法,使用嚴格模式

雖然全局變量上綁定的變量無法被垃圾回收,但是有時需要使用全局變量去存儲臨時信息,這個時候要格外小心,並在變量使用完畢后設置為 null,以回收內存。

 

全局變量注意事項

盡管我們討論了一些意外的全局變量,但是仍有一些明確的全局變量產生的垃圾。它們被定義為不可回收(除非定義為空或重新分配)。尤其當全局變量用於臨時存儲和處理大量信息時,需要多加小心。如果必須使用全局變量存儲大量數據時,確保用完以后把它設置為 null 或者重新定義。與全局變量相關的增加內存消耗的一個主因是緩存。緩存數據是為了重用,緩存必須有一個大小上限才有用。高內存消耗導致緩存突破上限,因為緩存內容無法被回收。

 

 

 參考: https://jinlong.github.io/2016/05/01/4-Types-of-Memory-Leaks-in-JavaScript-and-How-to-Get-Rid-Of-Them/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM