Node的require缓存会被垃圾回收吗?

8

NodeJS的require函数用于加载模块,它有一个“cache”属性(即对象)。

当我不再使用某个模块时,该缓存中的条目是否会被垃圾回收?(这将导致在下一次使用时需要从磁盘重新加载)

我认为答案是“否”,但我在网上没有找到任何参考资料

1个回答

8

我不再使用该模块,这个缓存中的条目会被垃圾回收吗?

不会。使用 require() 加载的模块会无限期地被缓存,无论您是否完成了对它们的使用。

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

这里有一个有关此主题的 node.js 文档链接

缓存

模块在第一次加载后会被缓存。这意味着(除其他事项外)如果调用 require('foo') 会得到完全相同的对象,如果它将解析为相同的文件。

如果要手动从缓存中删除模块,请参阅:

卸载代码/模块

虽然这将允许垃圾收集所有模块级变量,但考虑到node.js的结构,我认为它实际上不会从内存中卸载代码。


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