当前位置: 首页 > 面试题库 >

Node.js的垃圾收集器

邹海荣
2023-03-14
问题内容

我从带有node.js的线程垃圾收集中学到了node.js使用世代GC。

我通常使用循环对象引用(最终我都会删除/确保超出范围),并想知道node.js是否能很好地处理它们。所以例如。如果使用参考完成。计数,会有一个问题,所以我想知道这个节点有多好。

一些使用场景:

  1. 对于每个http请求,我创建一个带有lambda的setTimeout,该lambda可能引用了范围对象。作用域对象还引用了超时对象,等等。

  2. 对于每个用户会话,我都有一个 指向 http请求对象的 指针 (仍在进行C编程),该 指针 也具有对该会话对象的引用,等等。…请求对象经常被删除,而会话对象却没有。

编辑:我问,因为这个链接,我在网上找到http://lifecs.likai.org/2010/02/how-generational-garbage-
collector.html


问题答案:

正如您提到的,NodeJS使用了世代GC
…特别是v8。因此,它不会引用计数类型GC。相反,它将执行完整的标记扫掠型GC。

因此,只要您摆脱了对一组对象的所有引用(即使它们循环指向另一个对象),则它们应该在某个时刻被收集到垃圾。

这并不意味着您不应该关心GC。如果您有一个非常活跃的NodeJS服务器,则垃圾收集器将非常努力地清理垃圾,尤其是当您有许多“中等寿命”对象(即寿命不短或寿命长)时。



 类似资料:
  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄

  • JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 而在C 和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。 即使在机器学习应用程序等海量数据应用程序的情况下,ZGC 也具有高性能和高效工作。它确保在处理数据时不会因垃圾收集而长时间停顿。它支持 Linux、Window

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。从那时起,对这个垃圾收集做了很多改进,例如 - 并发类卸载 取消提交未使用的内存 支持班级数据共享 NUMA 多线程堆Pre-touch 最大堆大小限制从 4 T

  • 问题内容: 这是我到目前为止所读的内容,如果我写错了,请更正我: Node.js基于V8 JavaScript引擎。 V8 JavaScript引擎实现了世界垃圾收集 这导致Node.js有时完全关闭几秒钟到几分钟来处理垃圾回收。 如果这是为生产代码运行的,那么对于10,000个用户而言,这是几秒钟。 这在生产环境中真的可以接受吗? 问题答案: 是否可接受取决于您的应用程序和堆大小。Big Gc约