垃圾收集器何时释放“请求”对象?
var http = require('http'); function createRequest() { var options = {}; var request = http.request(options, function(response) {}); request.end(); } createRequest();
上面是一个小的Node.js片段。 http.request
的返回值是http.request
的一个实例,存储在函数createRequest
的本地variablesrequest
。
片段是一个更大的应用程序的一部分,可以对createRequest
多次调用。 我很困惑,这些实例何时通过Node.js中收集的http.request
调用垃圾返回。
在这种情况下, request
将永远不会被垃圾收集,因为您没有从response
读取任何数据,并且响应具有对request
的response.req
引用。
但是,在这种情况下:
var http = require('http'); function createRequest() { var options = {}; var request = http.request(options, function(response) { response.resume() }); request.end(); } createRequest();
request
将在响应发出end
事件后最终被垃圾回收。