相关疑难解决方法(0)

闭包如何造成内存泄漏?

我正在审查此演示文稿中的幻灯片:http://slid.es/gruizdevilla/memory

在其中一张幻灯片中,此代码显示它会创建内存泄漏:

var a = function () { 
   var smallStr = 'x',
   largeStr = new Array(1000000).join('x'); 

   return function (n) { 
        eval(''); //maintains reference to largeStr
        return smallStr; 
   }; 
}();
Run Code Online (Sandbox Code Playgroud)

闭包可能是内存泄漏的另一个来源.了解闭包中保留的引用.

并记住:eval是邪恶的

有人可以解释这个问题吗?

javascript

8
推荐指数
1
解决办法
918
查看次数

如何在JavaScript中创建内存泄漏并监视内存使用情况

我正在尝试使用以下代码片段在JavaScript中分配内存,以研究内存泄漏/消耗情况。然而

performance.memory.usedJSHeapSize 
Run Code Online (Sandbox Code Playgroud)

总是显示相同的数字,在我的情况下为10000000。即使动态创建元素并附加到DOM,该数字怎么也不会改变?

我需要一个JavaScript代码段来创建内存泄漏并动态使用performance.memory.usedJSHeapSize(或其他任何存在的函数)来监视其使用情况。

我尝试了这段代码,但performance.memory.usedJSHeapSize仍然为10000000:

<body>
    <p id="memory" style="position: fixed; top:10px; left:10px"></p>
<script>

    setInterval(() => {
        document.getElementById("memory").innerHTML = performance.memory.usedJSHeapSize
    }, 300);
     btn = [];
    let i = 0;
    setInterval(() => {
        for (let j = 0; j < 1000; j++) {
            ++i;
            let k=i;
            btn[k] = document.createElement("BUTTON");
            document.body.appendChild(btn[k]);
            btn[k].innerHTML = k;
            btn[k].addEventListener("click", function () {
                alert(k);
            });
        }
    }, 5000);
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

我已经在这篇文章中厌倦了2013年给出的示例,但是这个示例也不再造成内存泄漏。

如何在JavaScript中造成内存泄漏?

javascript memory-leaks

8
推荐指数
1
解决办法
280
查看次数

标签 统计

javascript ×2

memory-leaks ×1