垃圾回收器何时释放“request”对象?

3
var http = require('http');
function createRequest() {
    var options = {};
    var request = http.request(options, function(response) {});
    request.end();
}
createRequest();

以下是一个小的Node.js片段。 http.request 的返回值是 http.ClientRequest 的一个实例,并存储在函数 createRequest 内的本地变量 request 中。
该片段是一个更大应用程序的一部分,该应用程序对createRequest进行了多个调用。我不确定这些实例何时被垃圾收集器在Node.js中回收。
1个回答

2
在这种情况下,request永远不会被垃圾回收,因为你没有从response中读取任何数据,并且response有一个response.req引用指向request
然而,在这种情况下:
var http = require('http');
function createRequest() {
    var options = {};
    var request = http.request(options, function(response) {
        response.resume()
    });
    request.end();
}
createRequest();

requestend事件发生后,最终会被垃圾回收。


响应(response)具有对请求(request)的引用,可通过 response.req 进行访问。您能给我提供一个记录了这一点的链接吗? - Bharat Khatri
2
我认为这并没有被记录,这里是代码:https://github.com/joyent/node/blob/v0.10.22/lib/http.js#L1684。无论如何,垃圾收集器并不关心它是否被记录。 - vkurchatkin
我认为请求和响应对象的图表将被垃圾收集器检测为从主程序不可访问,因此有资格进行垃圾回收。 - Peter Lyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接