我有多個功能調用在一個鏈中的下一個,在處理相當大的數據集,以同樣大組不同的數據:如何釋放先前堆棧幀的存儲器中的Javascript
function first_step(input_data, second_step_callback)
{
result = ... // do some processing
second_step_callback(result, third_step);
}
function second_step(intermediate_data, third_step_callback)
{
result = ... // do some processing
third_step_callback(result);
}
function third_step(intermediate_data) { }
first_step(huge_data, second_step);
在third_step
內存不足(當內存使用量達到大約1.5 GB時,Chrome似乎殺死了該選項卡)。
我認爲,當達到third_step()
時,input_data
從first_step()
仍然保留,因爲first_step()
是在調用棧上,不是嗎?至少在調試器運行時,我可以看到數據。
顯然我不需要它了。在first_step()
之後second_step_callback(result, third_step);
之後沒有代碼。也許如果我可以釋放內存,我的選項卡可能在處理這種大小的數據集時仍然存在。我可以這樣做嗎?
1.5千兆字節比客戶端代碼中的*「相當大」*要多得多,你可以肯定你沒有無限循環 – adeneo
它在處理300 MB輸入文件時發生(https:// github.com/AndreKR/XdebugFlamechartConverter)和似乎合理的內存使用情況。我無法真正把它分解成大塊,因爲在某些時候我必須把整棵樹留在記憶中。這就是爲什麼我想在繼續處理樹進入下一步之前丟棄原始數據的原因。 – AndreKR