在启动时,似乎我的node.js应用程序使用大约200MB的内存。如果我暂时不管它,它会缩小到大约9MB。
是否可以从应用内部:
我问的原因是,我从磁盘加载了一些临时处理的文件。这可能会导致内存使用量激增。但我不希望在GC运行之前加载更多文件,否则存在内存不足的风险。
有什么建议吗?
答案 0 :(得分:77)
如果使用--expose-gc
标志启动节点进程,则可以调用global.gc()
强制节点运行垃圾回收。请注意,节点应用中的所有其他执行都会暂停,直到GC完成,因此不要经常使用它,否则会影响性能。
您可能希望在代码中进行GC调用时包含一项检查,以便在没有标记的情况下运行节点时不会出现问题:
try {
if (global.gc) {global.gc();}
} catch (e) {
console.log("`node --expose-gc index.js`");
process.exit();
}
答案 1 :(得分:6)
Node允许我们手动触发垃圾收集。这可以通过运行具有--expose-gc
标志的节点(即node --expose-gc index.js
)来完成
一旦节点在该模式下运行,您可以通过从程序中调用global.gc()
来以编程方式触发垃圾收集。
前 -
// Force garbage collection every time this function is called
try {
if (global.gc) {global.gc();}
} catch (e) {
console.log("`node --expose-gc index.js`");
process.exit();
}
答案 2 :(得分:-5)
我建议的一点是,除非您在启动时需要这些文件,否则请尝试仅在需要时加载。
编辑:请参阅上面的帖子。