以下のコードでは、メモリが継続的に増加するとは思っていませんが、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がクロージャを除去して配列をきれいにするのに十分速いのですか?)しかし、このコードは本当に問題を募集しています。 **決してタスクの実行を待つためにタイムアウトを使用しないでください。 –
"私は前のタイムアウトが完了するのに十分な10ミリ秒を待っています_なぜそれをお考えですか? – KarelG
コンソールログを追加すると、そのことを確認できます。まだconsole.logでメモリリークが発生する – Karamell