熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Javascript內存洩露概念及檢測方法

2013-11-23 19:21:00  來源: Java核心技術 
    什麼是內存洩露?
   
    內存洩露是指分配給應用的內存不能被重新分配即使在內存已經不被使用的時候正常情況下垃圾回收器在DOM 元素和event 處理器不被引用或訪問的時候回收它們但是IE 的早些版本(IE和之前)中內存洩露是很容易出現的因為內存管理器不能正確理解Javascript 生命周期而且在周期被打破(可以通過賦值為null 實現)前不會回收內存
   
    Javascript 中出現內存洩露的主要原因是什麼?
   
    ) DOM 插入順序
   
    當 個不同范圍的DOM 對象附加到一起的時候一個臨時的對象會被創建這個DOM 對象改變范圍到document 時那個臨時對象就沒用了也就是說DOM對象應該按照從當前頁面存在的最上面的DOM 元素開始往下直到剩下的DOM 元素的順序添加這樣它們就總是有同樣的范圍不會產生臨時對象
   
    ) Javascript 閉包
   
    因為Javascript 范圍的限制許多實現依賴Javascript 閉包如果你想了解更多閉包方面的問題請查看我的前面的文章JavaScript Scope and Closure 閉包可以導致內存洩露是因為內部方法保持一個對外部方法變量的引用所以盡管方法返回了內部方法還可以繼續訪問在外部方法中定義的私有變量對Javascript 程序員來說最好的做法是在頁面重載前斷開所有的事件處理器
   
    ) 循環引用
   
    一個很簡單的例子一個DOM 對象被一個Javascript 對象引用與此同時又引用同一個或其它的Javascript 對象這個DOM 對象可能會引發內存洩露這個DOM 對象的引用將不會在腳本停止的時候被垃圾回收器回收要想破壞循環引用引用DOM 元素的對象或DOM 對象的引用需要被賦值為null
   
    如何檢測?
   
    內存洩露對開發者來說一般很難檢測因為它們是由大量代碼中的一些意外的錯誤引起的但它在系統內存不足前並不影響程序的功能這就是為什麼會有人在很長時間的測試期中收集應用程序性能指標來測試性能
   
    最簡單的檢測內存洩露的方式是用任務管理器檢查內存使用情況在Chrome 浏覽器的新選項卡中打開應用並查看內存使用量是不是越來越多還有其他的調試工具提供內存監視器比如Chrome 開發者工具這是谷歌開者這網站中的堆分析的特性的教程


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26701.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.