在NodeJS中,请求完成后,请求期间创建的对象是否会自动销毁?

时间:2014-11-14 08:26:47

标签: node.js

如果我为NodeJS服务器收到的每个请求创建Controller和Model对象,请求完成后是否会自动销毁这些对象,还是必须手动删除它们?

例如,如果我有一个路由器代码段

 
router.get('/login', function(req, res) {
    var authenticate = new Authenticate()
    authenticate.verify(req, res)
})
 

并在我的控制器中

 
Authenticate.prototype.verify = function(req, res){
    //perform verification and redirect user
    res.redirect("/some-logged-in-path")
}
 

一旦请求完成,NodeJS会破坏创建的身份验证对象吗?

根据我对其他为每个请求使用连接的Web技术的理解,除非缓存,否则这些对象将被销毁;所以,我认为NodeJS做了类似的事情;但是,我找不到任何关于这个问题的文件。

感谢。

2 个答案:

答案 0 :(得分:2)

  

请求完成后会自动销毁这些对象还是我必须手动删除它们?

都不是。在这些对象无法访问之后(通常在请求结束时根据您的代码段),它们将变为符合条件以进行垃圾回收。但是,这并不意味着垃圾收集器实际上在每个请求之后运行(它运行频率低得多),也不意味着garbagge收集器实际上在下一次运行时处理这些特定对象的破坏(它以递增方式运行,所以有时它只是做一些清理但不是所有待处理的清理工作。)

话虽如此,您不需要进行任何手动清理(也不可能或不可取)。您的上述代码段很好,并且不需要对内存管理进行任何特殊的代码更改。垃圾收集FTW!

答案 1 :(得分:1)

有一篇关于V8性能引擎的好文章,包括垃圾收集,here。 Chrome和Node.js都使用V8。

你听到的是正确的 - 一旦没有对象的引用,就会收集垃圾。