內存泄漏對開發者來說一般很難檢測因為它們是由一些大量代碼中的意外的錯誤引起的,但它在系統內存不足前並不影響程序的功能。這就是為什么會有人在很長時間的測試期中收集應用程序性能指標來測試性能。
最簡單的檢測內存泄漏的方式是用任務管理器檢查內存使用情況。在Chrome瀏覽器的新選項卡中打開應用並查看內存使用量是不是越來越多。還有其他的調試工具提供內存監視器,比如Chrome開發者工具。這是谷歌開者這網站中的堆分析的特性的教程。
目前IE的常用內存泄露工具主要有兩個:sIEve和IE JavaScript Memory Leak Detector。
sIEve 官方網站: http://home.wanadoo.nl/jsrosman/
下載:Download sIEve-0.0.8.exe
這是一款獨立的桌面exe程序,無需安裝,內部嵌入了一個IE 瀏覽器控件,用戶可以通過該控件訪問需要測試的網頁。
這款工具源於Sourceforge的開源項目ieleak,但不知為何后來開發停滯了,沒有版本的更新,只能看到留下的源代碼。
從代碼中可以看出,sIEve監控DOM對象中的引用數目,如果在頁面卸載之后,還存在引用大於0的DOM對象,它就會顯示這些DOM對象,同時還會實時的顯示在用戶操作的時候內存和DOM泄露的情況。
優點:有源代碼、可以參考學習,獨立工具,無需安裝。我記得看過一則新聞,IE8發布時,IE的開發經理還建議開發人員使用sIEve調試內存泄漏情況。
缺點:只能提供沒有釋放的DOM對象,但是不知道DOM對象是javaScript代碼在何時何處導致泄漏的,無法定位泄露原因;版本沒有更新。
IE JavaScript Memory Leak Detector 官方網站:http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx
這款工具由微軟的內部員工開發,功能看起來比sIEve要強大。
IE JavaScript Memory Leak Detector需要安裝,作為IE的插件形式存在,可以在工具欄的菜單中啟用和關閉,啟動之后在IE的下端出現一個工作窗口。
這個工具將監控代碼注入到了IE瀏覽器中的動態鏈接庫中,IE在做DOM或者JavaScript解釋時,工具都會截獲、記錄並轉發,IE並沒有意識到IE JavaScript Memory Leak Detector的存在。
用戶可以在IE中打開IE JavaScript Memory Leak Detector,然后訪問需要測試的網頁,在切換網頁時,IE JavaScript Memory Leak Detector會報告可疑的內存泄露,包括泄露的DOM對象,引起泄漏的引用代碼和代碼出處,這個工具對於簡單的javascript代碼毫無疑問是非 常好用的,但是我在實際使用當中發現對於復雜的代碼,如使用了dojo工具包的Javascrpt代碼,即使發生了內存泄露,引起泄漏的引用代碼和代碼出 處這兩項功能很難派上用場,最后都會指向dojo的源文件,而且指的位置也可能出錯,比如定位到了注釋上,汗….
遺憾的是,這個工具除了beta版之后,再也沒有更新。
另外,IE JavaScript Memory Leak Detector可以分別模擬IE6\IE7的泄露情況,根本區別是IE7對內存泄露問題的一大進步是可以回收所有attach到DOM樹上的泄露對象。建議升級到IE8的瀏覽器模式下。
優點:包含泄露定位功能。
缺點:對於復雜的Javascript代碼,無法准確定位泄露位置。
