查看此示例代码,该代码在nodejs中创建文件的副本。
var fs = require('fs');
var out = fs.createWriteStream('1_GB_FILE_COPY');
var inp = fs.createReadStream('1_GB_FILE');
inp.pipe(out);
inp.on('end', function() {
console.log("end");
})
process.stdin.on('data', function() {});//just to keep process alive after copy
一切都很好,这段代码可以正常运行。 Nodejs在复制期间使用大约140MB的内存。但是在复制之后,它永远不会释放这个内存。这是正常的吗?为什么节点保留这个记忆?有没有办法强迫它冲洗它?
答案 0 :(得分:0)
系统监视器为您提供了一个非常不准确的视图,了解您的节点应用程序实际使用的内存使用情况。操作系统如何将内存分配给进程以及节点如何管理自己的内存之间存在很大差异。您可以使用chrome dev工具来获得更好的外观。我在内存快照之前和之后运行你的代码,比较两者,发现以下内容:
简而言之,您绝对不会像您想象的那样泄漏140MB。要亲自看到这个,这里有一个很好的指南: