javascript - 在 NodeJS 中为垃圾收集“标记”一个对象
问题描述
我正在使用 NodeJS 中的一些代码,并且一些对象(即“事件”)将处于中等寿命,然后被丢弃。
当我停止使用它们时,我不希望它们成为内存负担,并且我想知道是否有办法将对象标记为由 V8 引擎进行垃圾收集。(或者更好的是——根据命令完全销毁对象)
我知道垃圾收集是自动的,但是由于这些对象在 60% 的情况下会比年轻代存活得更久,所以我想确保有一种方法在一段时间后它们不会在老年代中出现它们被丢弃,同时避免了搜索整个事物的低效率。
我环顾四周,到目前为止在 NodeJS 文档中找不到任何内容。我有两个主要问题:
- 这甚至会那么好吗?能够“标记”大量未使用的对象以进行 gc 处理是否值得?(一次可能超过 100 个)
- 有没有办法做到这一点?
任何东西(推测、提示、文章)都将不胜感激。谢谢!
解决方案
(这里是 V8 开发人员。)没有办法做到这一点,您不必担心。标记的工作方式相反:GC 找到并标记活动对象。死对象永远不会被标记,也没有明确的销毁它们的行为。GC 甚至从不查看死对象。这也意味着死物不是负担。
“垃圾收集器”确实是一个误导性术语:它实际上并没有发现或收集垃圾;相反,它会找到非垃圾并保留它,而它没有找到的所有内容都会通过假设相应的内存区域是空闲的而忽略。
理论上,可能有一种方法可以手动将对象(先前占用的内存)添加到“空闲列表”中;但有一个根本问题:自动内存管理的部分意义在于,自动化它提供了比依赖手动内存管理更好的安全性和稳定性(程序员是人类,人类会犯错误)。这意味着按照设计,GC 不能信任任何其他人将对象声明为不可访问。它总是坚持验证该声明——这相当于忽略它,因为验证它的唯一方法是运行一个完整的常规 GC 周期。
推荐阅读
- c - 将百分比显示添加到 makefile 输出
- java - 如何抑制硒日志
- python - 用 boto3 检索字母间隔
- promise - 如何让 Raku 中的承诺超时?
- javascript - angular 2+,通过hash(#) url滑动到指定元素
- javascript - 如何在 Opera 中更改书签图标?
- ios - 如何在 Swift Apple Watch 中将本地 json 文件保存为 zip 文件
- html - 将可滚动的 div 放在 1 个容器中的另一个 div 上方
- javascript - 如何在 Cloud Function 中循环遍历 Firestore 数组值
- nestjs - 无法分配给对象“#”的只读属性“writeQueueSize”
'