在下面的代碼中,我不認爲內存會不斷增加,但它根據chrome調試器的不同而增加。這段代碼爲什麼會導致內存泄漏?
在循環的中間,我等待10毫秒,這足以讓上一次超時完成。然而,內存似乎並沒有被釋放。這是爲什麼?
while (true) {
let giantArray = Array(100000).fill().map(() => Math.random());
await new Promise((resolve) => setTimeout(resolve, 10));
setTimeout(() => {
giantArray[3] = 3; // If I don't reference giantArray, there is no leak
}, 1);
}
很難說出執行過程中究竟發生了什麼(GC是否足以快速移除閉包和清理數組?),但是這段代碼真的需要解決問題。 **從不**使用超時等待任務執行。 –
「_I等待10毫秒,這足以讓上一次超時完成。」你爲什麼這麼想? – KarelG
當我添加控制檯日誌時,我可以確認。內存泄漏仍然與console.log發生 – Karamell