如果我为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做了类似的事情;但是,我找不到任何关于这个问题的文件。
感谢。
答案 0 :(得分:2)
请求完成后会自动销毁这些对象还是我必须手动删除它们?
都不是。在这些对象无法访问之后(通常在请求结束时根据您的代码段),它们将变为符合条件以进行垃圾回收。但是,这并不意味着垃圾收集器实际上在每个请求之后运行(它运行频率低得多),也不意味着garbagge收集器实际上在下一次运行时处理这些特定对象的破坏(它以递增方式运行,所以有时它只是做一些清理但不是所有待处理的清理工作。)
话虽如此,您不需要进行任何手动清理(也不可能或不可取)。您的上述代码段很好,并且不需要对内存管理进行任何特殊的代码更改。垃圾收集FTW!
答案 1 :(得分:1)
有一篇关于V8性能引擎的好文章,包括垃圾收集,here。 Chrome和Node.js都使用V8。
你听到的是正确的 - 一旦没有对象的引用,就会收集垃圾。