'marking' 一个用于 NodeJS 垃圾回收的对象
'marking' an object for garbage collection in NodeJS
我正在使用 NodeJS 中的一些代码,一些对象(即 'events')将处于中等寿命,然后被丢弃。
我不希望它们在我停止使用时成为内存负担,我想知道是否有办法将对象标记为由 V8 引擎进行垃圾回收。 (或者更好的是 - 根据命令完全销毁对象)
我知道垃圾回收是自动的,但由于这些对象在 60% 的时间里会比年轻一代活得更久,我想确保有一种方法它们不会在老年代安营扎寨-丢弃后生成一段时间,同时避免搜索整个东西的低效率。
我环顾四周,到目前为止在 NodeJS 文档中找不到任何内容。我有两个主要问题:
- 这样也好吗?能够 'mark' 对大量未使用的对象进行 gc 处理是否值得? (一次可能100+)
- 有没有办法做到这一点?
任何东西(推测、提示、文章)都将不胜感激。谢谢!
(此处为 V8 开发人员。)没有办法做到这一点,您无需担心。标记以相反的方式工作:GC 查找并标记 live 对象。死对象永远不会被标记,也没有明确的销毁它们的行为。 GC 甚至从不查看死对象。这也意味着死对象不是负担。
“垃圾收集器”确实是一个误导性的术语:它实际上并不查找或收集垃圾;相反,它会找到 non-garbage 并保留它,并且它没有找到的所有内容都只是通过假设相应的内存区域是空闲的来忽略。
理论上,可以手动添加(之前占用的内存)对象到“空闲列表”;但这有一个根本问题:自动内存管理的部分要点在于,自动化它比依赖手动内存管理(程序员是人,人会犯错误)提供更好的安全性和稳定性。这意味着根据设计,GC 不能相信任何其他人将对象声明为不可访问;它会始终坚持验证该声明——这相当于忽略它,因为验证它的唯一方法是 运行 一个完整的常规 GC 周期。
我正在使用 NodeJS 中的一些代码,一些对象(即 'events')将处于中等寿命,然后被丢弃。
我不希望它们在我停止使用时成为内存负担,我想知道是否有办法将对象标记为由 V8 引擎进行垃圾回收。 (或者更好的是 - 根据命令完全销毁对象)
我知道垃圾回收是自动的,但由于这些对象在 60% 的时间里会比年轻一代活得更久,我想确保有一种方法它们不会在老年代安营扎寨-丢弃后生成一段时间,同时避免搜索整个东西的低效率。
我环顾四周,到目前为止在 NodeJS 文档中找不到任何内容。我有两个主要问题:
- 这样也好吗?能够 'mark' 对大量未使用的对象进行 gc 处理是否值得? (一次可能100+)
- 有没有办法做到这一点?
任何东西(推测、提示、文章)都将不胜感激。谢谢!
(此处为 V8 开发人员。)没有办法做到这一点,您无需担心。标记以相反的方式工作:GC 查找并标记 live 对象。死对象永远不会被标记,也没有明确的销毁它们的行为。 GC 甚至从不查看死对象。这也意味着死对象不是负担。
“垃圾收集器”确实是一个误导性的术语:它实际上并不查找或收集垃圾;相反,它会找到 non-garbage 并保留它,并且它没有找到的所有内容都只是通过假设相应的内存区域是空闲的来忽略。
理论上,可以手动添加(之前占用的内存)对象到“空闲列表”;但这有一个根本问题:自动内存管理的部分要点在于,自动化它比依赖手动内存管理(程序员是人,人会犯错误)提供更好的安全性和稳定性。这意味着根据设计,GC 不能相信任何其他人将对象声明为不可访问;它会始终坚持验证该声明——这相当于忽略它,因为验证它的唯一方法是 运行 一个完整的常规 GC 周期。