當我們開始測試我們的NodeJS項目時,我們注意到了巨大的內存消耗。這是由我們項目中的內存泄漏引起的。所以我們開始尋找可能產生內存泄漏的所有原因。在stackoverflow上有這個問題的一些答案,但是沒有任何關於什麼是內存泄漏的直接文檔。NodeJS中的內存泄漏和關閉問題
我的問題:
- 是否有V8 GC文檔和它是如何工作(詳細)?
- 如何釋放回調以便GC可以收集它們?
V8 GC是否收集未使用的變量,但是在它們下面有一個函數閉包?例如:
var serviceChannel = require('./channel'); var dataRegistration = require('../data/registration'); function registerOnChannel(userID, channelID, callsuccess, callerror) { serviceChannel.findChannel(channelID, function (channel) { if (!channel) { callerror("Channel doesn' exists"); return; } dataRegistration.registerOnChannel(userID, channelID, function (registration) { if (!registration) { callerror("Registration doesn' exists"); return; } callsuccess("Registration successful"); }, function (error) { callerror("Error on registration"); }) }, function (error) { callerror("Error on finding channel"); }) }
所以,serviceChannel和dataRegistration將只要registerOnChanel是現場保存在內存中。但是可變通道是否會被GC刪除(它沒有被任何函數使用)?
「所以,只要registerOnChanel是活的,serviceChannel和dataRegistration就會保存在內存中。你如何得出這個結論? – 2013-05-09 22:57:33
這是一個封閉。 – 2013-05-10 11:30:04
在您發佈的代碼中沒有關閉的證據,至少不會使serviceChannel或dataRegistration保持活動狀態。 – 2013-05-10 11:37:46