Kai*_*zay 57 javascript garbage-collection node.js
在启动时,似乎我的node.js应用程序使用大约200MB的内存.如果我暂时不管它,它会缩小到9MB左右.
是否可以从应用程序内:
我问的原因是,我从磁盘加载了一些临时处理的文件.这可能会导致内存使用量激增.但是我不希望在GC运行之前加载更多文件,否则存在内存不足的风险.
有什么建议 ?
Ign*_*uus 91
如果使用该--expose-gc
标志启动节点进程,则可以调用global.gc()
强制节点来运行垃圾回收.请记住,节点应用程序中的所有其他执行都会暂停,直到GC完成,因此请不要经常使用它,否则会影响性能.
您可能希望在代码中进行GC调用时包含一个检查,以便在没有标志的情况下运行节点时不会出现问题:
try {
if (global.gc) {global.gc();}
} catch (e) {
console.log("`node --expose-gc index.js`");
process.exit();
}
Run Code Online (Sandbox Code Playgroud)
Node允许我们手动触发垃圾回收。这可以通过运行带有--expose-gc
标志(即node --expose-gc index.js
)的Node来完成。
在该模式下运行节点后,您可以随时通过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();
}
Run Code Online (Sandbox Code Playgroud)
当您--expose-gc
因任何原因无法在启动时将标志传递给节点进程时,您可以尝试以下操作:
import { setFlagsFromString } from 'v8';
import { runInNewContext } from 'vm';
setFlagsFromString('--expose_gc');
const gc = runInNewContext('gc'); // nocommit
gc();
Run Code Online (Sandbox Code Playgroud)
笔记:
此方法应谨慎使用。VM 启动后更改设置可能会导致不可预测的行为,包括崩溃和数据丢失;或者它可能什么也不做。
归档时间: |
|
查看次数: |
29356 次 |
最近记录: |