Node是否需要收集缓存垃圾?

时间:2016-06-03 17:54:28

标签: node.js

NodeJS require函数,它加载模块,有一个“缓存”(它是一个对象)。

条目是这个缓存是垃圾收集一旦我不再使用该模块? (如果再次使用,将导致从磁盘加载)

我认为答案是“不”,但我没有在网上找到任何引用

1 个答案:

答案 0 :(得分:8)

  

条目是这个缓存在我不再使用后被垃圾收集   模块?

没有。加载require()的模块无论是否使用它们都会无限期缓存。

模块使用的Javascript变量/对象的内存是垃圾收集,受垃圾收集的所有常规规则的限制(当没有仍然具有对变量/对象的引用的实时代码时)。但是,模块缓存会保留对已加载模块本身的引用,因此除非从缓存中手动删除模块,否则代码或任何模块级变量都不会被垃圾收集。

这是关于该主题的link to the node.js doc

  

缓存

     

模块在第一次加载后进行缓存。这个   意味着(除其他事项外)每个要求的呼叫(' foo')都会得到   返回完全相同的对象,如果它将解析为相同   文件。

如果要从缓存中手动删除模块,请在此处进行说明:

unloading code/modules

尽管如此,这将允许所有模块级变量被垃圾收集,因为node.js的结构方式我不认为它实际上会从内存中卸载代码。