[英]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);
}
它應該線性增加內存分配的原因是:'check'方法在其定義中調用自身,因此閉包變量將可用於內部檢查方法執行,然后再次為測試函數創建執行上下文,依此類推。
此外,在每次執行中,我們都會創建一個Uint16Array的內存塊,我相信它是在堆中分配的,並且永遠不應該從解析中獲取,因為它可以從閉包中訪問。
記憶簡介:
查看內存時間軸,隨着時間的增加,它似乎不會增加內存分配。 這是預期的行為嗎?
uArr
只是一個局部變量,在check()
退出后分配,使用,然后進行垃圾收集。 並且check()
內沒有閉包。 check()
調用setTimeout()
(但未定義check()
。
關閉此頁面可能對您有所幫助。
雖然確實如果有N個調用check()
,就會創建N個閉包(以及N個node
副本), setTimeout()
會在調用后釋放對check()
引用。 因此,那里也沒有泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.