在 NodeJS 中“标记”用于垃圾收集的对象

Moo*_*hua 1 javascript garbage-collection memory-management v8 node.js

我正在使用 NodeJS 中的一些代码,一些对象(即“事件”)将处于中等寿命,然后被丢弃。

当我停止使用它们时,我不希望它们成为内存负担,我想知道是否有办法将对象标记为 V8 引擎垃圾收集。(或者更好 - 完全销毁命令的对象)

我知道垃圾收集是自动的,但是由于这些对象在 60% 的时间里会比年轻代存活得更久,我想确保有一种方法他们不会在老年代驻扎一段时间它们被丢弃,同时避免搜索整个事物的低效率。

我环顾四周,到目前为止在 NodeJS 文档中找不到任何内容。我有两个主要问题:

  • 这甚至会那么好?能够“标记”大量未使用的对象进行 gc 是否值得?(一次可能超过 100 个)
  • 有没有办法做到这一点?

任何(推测,提示,文章)将不胜感激。谢谢!

jmr*_*mrk 6

(此处为 V8 开发人员。)没有办法做到这一点,您无需担心。标记的工作方式相反:GC 查找并标记活动对象。死对象永远不会被标记,也没有明确的销毁它们的行为。GC 甚至从不查看死对象。这也意味着死物不是负担。

“垃圾收集器”确实是一个误导性术语:它实际上并不查找或收集垃圾;相反,它找到垃圾并保留它,它没有找到的所有内容只是通过假设相应的内存区域是空闲的而忽略。

理论上,可能有一种方法可以手动将(之前占用的内存)对象添加到“空闲列表”中;但这有一个基本问题:自动内存管理的部分要点在于,与依赖手动内存管理(程序员是人,而人会犯错)相比,自动化提供了更好的安全性和稳定性。这意味着按照设计,GC 不能相信任何其他人将对象声明为不可达;它会始终坚持验证该声明——这相当于忽略它,因为验证它的唯一方法是运行完整的常规 GC 循环。