内存泄漏对开发者来说一般很难检测因为它们是由一些大量代码中的意外的错误引起的,但它在系统内存不足前并不影响程序的功能。这就是为什么会有人在很长时间的测试期中收集应用程序性能指标来测试性能。
最简单的检测内存泄漏的方式是用任务管理器检查内存使用情况。在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可以分别模拟IE6IE7的泄露情况,根本区别是IE7对内存泄露问题的一大进步是可以回收所有attach到DOM树上的泄露对象。建议升级到IE8的浏览器模式下。
优点:包含泄露定位功能。
缺点:对于复杂的Javascript代码,无法准确定位泄露位置。