介绍

leak finder 是google开源团队发布了一个新的可以帮助web应用程序开发者在他们的JavaScript程序中找出内存泄露问题的工具;

http://feedproxy.google.com/r/GoogleOpenSourceBlog/3/xgd4c83Bc4M/leak-finder-new-tool-for-javascript.html

项目文档: https://code.google.com/p/leak-finder-for-javascript/

内存泄露

javascript是一门具有垃圾收集机制的语言,不会因为忘记释放内存而出现传统的内存泄露问题,因为如果对象的所有引用被drop后,对象会被回收,内存会自动释放。

通常我们使用new创建对象,GC负责回收对象占用内存区域, GC在回收内存时,首先会判断该对象是否被其它对象引用。在确定没有其它对象引用便释放该对象内存区域。但是,JavaScript程序会在无意间保留对象引用而造成内存泄露。

内存泄露CASE

1、Native对象(例如Dom、ActiveX Object)与Javascript对象间的循环引用, 在IE中出现leak情况比较多,源于IE的对Native Object and Javascript Object 的GC回收机制不同;

2、Closure 可以参考 http://jibbering.com/faq/notes/closures/

举例说明

function Cat() {
var name = "Kitty";
var age = "1";
this.version = 1;
var setAge = function(newAge){
};
return setAge;
}
var myCat = new Cat();

为什么导致momery leak?

因为在new Cat()后,局部变量setAge的作用域链被改变, GC得不到释放,这种情况会被定义为momery leak

leak finder 使用

One such definition is: If a goog.Disposable object was notdispose()d, but the user code dropped all references to it, it's unintentionally alive. (Such objects are kept alive by the goog.Disposable.instances_ array when the Disposable monitoring mode is enabled.)

在可能泄露的对象上加入如下继承,如上述实例:

goog.inherits(Cat, goog.Disposable);

同时在对象的构造中执行 goog.base(this), 如下:

function Cat() {
goog.base(this)
var name = "Kitty";
var age = "1";
this.version = 1;
var setAge = function(newAge){
};
return setAge;
} goog.inherits(Cat, goog.Disposable);
var myCat = new Cat(); MyObj = function() {
goog.base(this);
} goog.inherits(MyObj, goog.Disposable); MyObjCreator = function() {
} MyObjCreator.prototype.Create = function() {
return new MyObj();
} var creator = new MyObjCreator(); // Not a leak.
var handle = creator.Create(); // Leak.
var handle2 = creator.Create();
handle2.dispose();
handle2 = null;

leak finder的更多相关文章

  1. [转]Google开源Leak Finder—用于检测内存泄漏的JavaScript工具-----可惜,暂时打不开google的网站,下载不了

    近日,Google开源了Leak Finder,这款工具可以查看JavaScript应用的堆,进而发现内存泄漏. 作为一门垃圾收集语言,JavaScript并不会出现常见的内存泄露情况,特别是像C++ ...

  2. Linux 动态链接库

    如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...

  3. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  4. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  5. Frontend Development

    原文链接: https://github.com/dypsilon/frontend-dev-bookmarks Frontend Development Looking for something ...

  6. Linux 动态链接库 - dll劫持

    如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...

  7. 【转载】10 个实用技巧,让 Finder 带你飞

    来自:http://sspai.com/27403/ Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组 ...

  8. 使用Visual Leak Detector for Visual C++ 捕捉内存泄露

    什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...

  9. iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed

    很奇怪的问题,使用真机测试没有问题.但使用模拟器测试的时候就会报这样的错误,错误类型为:Code Sign Error 错误提示是这样:resource fork, Finder informatio ...

随机推荐

  1. Spring Error : No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined

    报错信息:   Injection of autowired dependencies failed; nested exception is org.springframework.beans.fa ...

  2. WPF-控件(1)

    小记:最近公司使用WPF开发一款新的产品,从零基础开始学习WPF,在看书的过程中,有些内容需要规整到一起,最终选择了博客园,希望对自己所掌握的知识有所规整. --------------------- ...

  3. 更好的小票打印体验,huanent.printer2.0发布

    huanent.printer2.0是一个专注消费小票打印的类库.拥有许多先进的特性例如居中打印.自动换行等特性,可以通过简洁的代码来打印出复杂的消费小票.huanent.printer通过MIT方式 ...

  4. MVC实现(简单小例子)

    Here I’ll demonstrate simple Spring MVC framework for building web applications. First thing first. ...

  5. strace命令详解

    转自: http://www.cnblogs.com/ahuo/p/4150623.html 备注: 这篇博文学到的不仅仅是 strace 这个命令,还有前辈的排错思路,致敬! strace 命令是一 ...

  6. 一种laravel特有的serviceProvider的加载方式

    这里的laravel版本5.5. 我是使用到dingo这个包的时候,觉得很奇怪,我们一般的包使用的时候都需要加载一个serviceProvider,提供服务,dingo/api这里也有ServiceP ...

  7. MicroPython教程之TPYBoard开发板DIY小型家庭气象站

    众所周知,iPhone6/6Plus内置气压传感器,不过大家对于气压传感器还是很陌生.跟字面的意思一样,气压传感器就是用来测量气压的,但测量气压对于普通的手机用户来说又有什么作用呢? 海拔高度测量 对 ...

  8. vue2.0 微信oauth认证的正确调用位置

    运行在微信端的项目,很重要的环节是oauth认证:那在vue项目中,在何时何地调用oauth认证最合适呢? 经过观察,在项目启动过程中,会执行main.js文件:所以我将认证放在main.js中操作: ...

  9. 【分享】2017 开源中国新增开源项目排行榜 TOP 100

    2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度 ...

  10. Windows下安装Selenium

    安装python,建议在官网下载python3以上的版本 安装easy_install,找度娘 安装selenium,在命令行窗口下输入:pip install -U selenium 下载chrom ...