当我们开始测试我们的 NodeJS 项目时,我们注意到巨大的内存消耗。这是由我们整个项目的内存泄漏引起的。所以我们开始寻找所有可能产生内存泄漏的原因。在 stackoverflow 上有一些关于这个问题的答案,但是没有任何关于什么是内存泄漏和什么不是内存泄漏的严格文档。
我的问题:
- 是否有关于 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"); }) }
因此,只要 registerOnChanel 处于活动状态,serviceChannel 和 dataRegistration 就会保存在内存中。但是变量通道是否会被 GC 删除(它不被任何函数使用)?