介绍

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. 4.sass的分支结构、循环结构、函数

    分支结构 在sass里,可以使用@if让我们根据一些条件来应用特定的样式 结构: @if 条件 { } 如果条件为真的话,括号里的代码就会释放出来 例如: $use-refixes:true; .ro ...

  2. 3、debian8安装和处理

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 本文写于2016年1月10日09:35:45,首先向debian的创始人Ian Murdock表示沉痛惦念! http://bai ...

  3. 移动端的一些常用meta标签

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  4. 关于模拟登陆微博(PC)

    微博模拟登陆 1.基类对象的方法建立一个类__init__初始化方法,接收username和password. class launcher(): def __init__(self, usernam ...

  5. Sublime Text 使用教程

    Sublime Text 是一款非常轻量级而且功能十分强大的编辑器,支持大量插件,深受前端开发者的喜爱.多的不说,我们直接进入正题. 1.下载 ①.官网下载地址:http://www.sublimet ...

  6. C# DataGridVie利用model特性动态加载列

    今天闲来无事看到ORm的特性映射sql语句.我就想到datagridview也可以用这个来动态添加列.这样就不用每次都去界面上点开界面填列了. 代码简漏希望有人看到了能指点一二. 先定义好Datagr ...

  7. 如何实现虚拟机(VirtualBox)中的Ubuntu与Windows XP间的数据共享

    环境: 主机是Windows XP系统 虚拟机与Ubuntu的版本分别为: VirtualBox-3.2.12-68302-Win ubuntu-10.10-desktop-i386 前提:已安装Vi ...

  8. MicroPython-TPYBoard固件编译教程

    本文主要介绍一下,在Linux环境下编译micropython固件的方法和流程. 首先,我们先来看一下MicroPython的源码结构. github地址:https://github.com/mic ...

  9. 见招拆招-PostgreSQL中文全文索引效率优化

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  10. Go从三个站点中返回响应最快的

    利用协程可以轻松实现 package main import ( "fmt" "github.com/imroc/req" ) func mirroredQue ...