簡體   English   中英

Javascript內存泄漏setTimeout問題

[英]Javascript memory leak setTimeout issue

有沒有人知道為什么內存消耗在這里保持不變?

var count = 0;
$(init);

function init(){
    var node =  document.querySelector('.logs');

    function check(){
        var uArr = new Uint16Array(100);
        log(node, uArr.length);
        setTimeout(check,100);
    }   
    setTimeout(check,100);
}      


function log(node, text){
    if( count % 30  == 0 ){
        node.innerHTML = '';
    }
    var child = document.createElement('div');
    child.innerText = 'count ' + (count++) + " arr len "  + text;
    node.appendChild(child);
}

http://jsfiddle.net/V99Eb/11/

它應該線性增加內存分配的原因是:'check'方法在其定義中調用自身,因此閉包變量將可用於內部檢查方法執行,然后再次為測試函數創建執行上下文,依此類推。

此外,在每次執行中,我們都會創建一個Uint16Array的內存塊,我相信它是在堆中分配的,並且永遠不應該從解析中獲取,因為它可以從閉包中訪問。

記憶簡介: 在此輸入圖像描述

查看內存時間軸,隨着時間的增加,它似乎不會增加內存分配。 這是預期的行為嗎?

uArr只是一個局部變量,在check()退出后分配,使用,然后進行垃圾收集。 並且check()內沒有閉包。 check()調用setTimeout() (但未定義check()

關閉此頁面可能對您有所幫助。

雖然確實如果有N個調用check() ,就會創建N個閉包(以及N個node副本), setTimeout()會在調用后釋放對check()引用。 因此,那里也沒有泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM