有沒有人知道爲什麼內存消耗在這裏保持不變?Javascript內存泄漏setTimeout問題
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);
}
之所以應該線性增加內存分配是:「檢查」方法調用它本身的定義裏面,所以關閉變量將提供給內部檢查方法執行,然後再爲測試功能創建一個執行上下文等等。另外,在每個執行過程中,我們創建一個Uint16Array的內存塊,我相信這個內存塊是分配在堆中的,並且不應該因爲它可以從閉包中獲得而被取消分配。
內存簡介:
綜觀內存時間表,它似乎並沒有增加內存分配隨着時間增加而增加。這是預期的行爲?
爲什麼你的標題聲稱內存泄漏問題,實際上你證明沒有內存泄漏? –
'uArr'只是一個局部變量,它的生存期只是'check()'的當前執行。只要一次調用'check()'完成,該調用的局部變量就有資格收集垃圾,因爲不再有任何代碼可以到達它們。唯一在閉包中無限存活的變量是'node'。 – jfriend00