NodeJS的require函数用于加载模块,它有一个“cache”属性(即对象)。
当我不再使用某个模块时,该缓存中的条目是否会被垃圾回收?(这将导致在下一次使用时需要从磁盘重新加载)
我认为答案是“否”,但我在网上没有找到任何参考资料
NodeJS的require函数用于加载模块,它有一个“cache”属性(即对象)。
当我不再使用某个模块时,该缓存中的条目是否会被垃圾回收?(这将导致在下一次使用时需要从磁盘重新加载)
我认为答案是“否”,但我在网上没有找到任何参考资料
我不再使用该模块,这个缓存中的条目会被垃圾回收吗?
不会。使用 require()
加载的模块会无限期地被缓存,无论您是否完成了对它们的使用。
由模块使用的 JavaScript 变量/对象的内存将遵循所有常规垃圾回收规则(即当没有任何仍然引用变量/对象的活动代码时),但是模块缓存会保留对已加载模块本身的引用,因此除非手动从缓存中删除模块,否则代码或任何模块级变量都不会被垃圾回收。
这里有一个有关此主题的 node.js 文档链接。
缓存
模块在第一次加载后会被缓存。这意味着(除其他事项外)如果调用 require('foo') 会得到完全相同的对象,如果它将解析为相同的文件。
如果要手动从缓存中删除模块,请参阅:
虽然这将允许垃圾收集所有模块级变量,但考虑到node.js的结构,我认为它实际上不会从内存中卸载代码。