Javascript 内存泄漏、垃圾收集和引用

Javascript 内存泄漏、垃圾收集和引用,javascript,memory-leaks,garbage-collection,Javascript,Memory Leaks,Garbage Collection,上次我在谷歌研究内存泄漏、循环引用和垃圾收集的工作原理。但一切都有点令人困惑。据我所知,垃圾收集的工作方式如下: var a = {}; // a is only reference to this object a = 5 /* now variable a is reference to "number" (other js object) and now the first empty object has no reference, so it is cleaned from the m

上次我在谷歌研究内存泄漏、循环引用和垃圾收集的工作原理。但一切都有点令人困惑。据我所知,垃圾收集的工作方式如下:

var a = {}; // a is only reference to this object
a = 5 /* now variable a is reference to "number" (other js object)
and now the first empty object has no reference,
so it is cleaned from the memory. */
那看起来很酷。 但是我看到IE中有一个JScript对象和COM对象。如果COM和JScript中的对象之间存在循环引用,就会出现内存泄漏(未清理的内存)。 所以现在我很困惑,并举了一些简单的例子来说明我是否理解:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <div style="width: 30px;" id='myDiv'></div>
    <script language='javascript'>
    "use strict";
     var a = 4,
     i,
     div = document.createElement('div');

     //no leaks
     function noLeaks(b) {
         this.a = a;
         a = this.b;
     }
     var obj = new noLeaks(5);

     //leak pattern
    function makeLeaks(func) {
        div.badAttachToCOMObject = func; // the problem is here
    }
    makeLeaks(function(){}); //attach reference to JScript objcet/function?


    //no leaks
    function size() {
        return '30px'; //just a value
    }
    function noStyleLeaks() {
        div.style.width = size();
        /* DOM (COM in IE) element just get a value,
        not a reference, only if I put a object or
        function to the value is a problem? */
    }
    noStyleLeaks();

    //leaks or not
    function styleLeaks() {
        div.style.width = document.getElementById('myDiv').style.width;/* this
        is cycle reference, but maybe only between COM and COM objects?
        And do not make leaks? */
    }
    styleLeaks();
    </script>
</body>
</html>

“严格使用”;
var a=4,
我
div=document.createElement('div');
//无泄漏
函数无泄漏(b){
这个a=a;
a=这个。b;
}
var obj=新的无泄漏(5);
//泄漏模式
函数makeLeaks(func){
div.badAttachToCOMObject=func;//问题就在这里
}
makeLeaks(函数(){})//是否附加对JScript对象集/函数的引用?
//无泄漏
函数大小(){
返回“30px”;//只是一个值
}
函数noStyleLeaks(){
div.style.width=size();
/*DOM(IE中的COM)元素只获取一个值,
不是引用,只有在我放置对象或
函数到值是一个问题吗*/
}
鼻孔漏();
//泄漏与否
函数styleLeaks(){
div.style.width=document.getElementById('myDiv').style.width;/*此
是循环引用,但可能仅在COM和COM对象之间?
不泄密*/
}
styleLeaks();
我是否理解主要思想?还有最后一个问题,Chrome有一个任务管理器,windows任务管理器在每次刷新时都会显示内存使用量跃升约1mb,当我从以下位置使用它时:

函数泄漏内存(){
对于(i=0;i<50000;i++){
var parentDiv=
文件。createElement(“div”);
}
}

铬(21)是否会泄漏?我认为这是不正常的。所以我对JS垃圾收集的工作原理越来越困惑

给它时间来GC这些东西,我相信chrome中没有任何内存泄漏。你可能还想看看这个问题:如果你将“div”设置为null,你只会遇到异常,但不会出现内存泄漏。另外,你的noLeak“constructor”函数很奇怪:-)你读过吗?这是重复的还是你要求不同的东西?@Bergi是的,我以前读过这篇文章,只是我读了太多的文章,现在我真的很困惑,所以我想得到帮助。Ooo,并且这个“div=null”在测试脚本中不存在。我的错误在于抄袭。
function LeakMemory(){
    for(i = 0; i < 50000; i++){
        var parentDiv = 
        document.createElement("div");
    }
}