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

如何防止node.js中的内存泄漏?

管翼
2023-03-14
问题内容

我们知道node.js为我们提供了强大的功能,但强大的功能带来了巨大的责任。

据我所知,V8引擎不进行任何垃圾收集。因此,我们应该避免什么最常见的错误,以确保没有内存从节点服务器泄漏。

编辑: 对不起,V8确实具有强大的垃圾收集器。


问题答案:

据我所知,V8引擎不进行任何垃圾收集。

V8内置了强大而智能的垃圾收集器。

您的主要问题是不了解闭包如何维护对外部函数的范围和上下文的引用。这意味着您可以通过多种方式创建循环引用或以其他方式创建 无法 清除的变量。

这是因为您的代码 含糊不清 ,并且编译器无法判断垃圾回收是否 安全

强制GC拾取数据的一种方法是使变量为空。

function(foo, cb) {
    var bigObject = new BigObject();
    doFoo(foo).on("change", function(e) {
         if (e.type === bigObject.type) {
              cb();
              // bigObject = null;
         }
    });
}

v8如何知道在事件处理程序中进行大对象垃圾回收是否安全?并不是这样,您需要通过将变量设置为null来告诉它不再使用。

阅读各种文章:

  • http://www.ibm.com/developerworks/web/library/wa-memleak/


 类似资料:
  • 问题内容: 我正在设计一个Web应用程序,该应用程序旨在显示一堆使用AJAX定期更新的数据。一般的使用场景是用户将整天保持打开状态,然后不时浏览一下。 我遇到的问题是浏览器的内存占用量随时间缓慢增长。Firefox和IE 7(尽管不是Chrome)都在发生这种情况。几个小时后,它可能导致IE7占用约200MB的内存,而FF3导致占用约400MB的内存。 经过大量测试,我发现只有在响应AJAX调用时

  • 我正在使用org.AsynchTtpClient发布异步请求。 在关闭tomcat时,我得到了以下日志: 严重:web应用程序[/test]似乎启动了一个名为[pool-1-thread-1]的线程,但未能停止它。这很有可能造成内存泄漏。 2017年7月4日10:53:00 AM org.apache.catalina.loader.webappclassloaderbase clearRefer

  • TL;dr:如何在没有随机文本的情况下将无符号32位整数转换为chars/uint8_t 好的,我愿意为此牺牲几个声誉点。我需要快速将一个4字节的无符号整数转换为数组字节,以便读取/写入/操作我自己结构的二进制文件。 这样我就可以读取一个结构,然后将其用作对象,而不是读取它,为每个更改写入它。 但是当我尝试实现一个函数时,我得到了一个泄漏。指针只是不断在函数范围之外添加值。 主要: 和输出: 在我

  • 问题内容: 我在Java中的总的初学者和已经创建了一个简单的Java的Android片断其中一个Runnable 1,5秒钟后,我改变从到。它工作正常,基本上应该防止这种内存泄漏发生吗?我怀疑在发生设备定向时是否绝对没有内存泄漏。我很乐意对此进行检查,但无法在模拟的Android中更改方向。 这是代码: 编辑 它可以防止内存泄漏,但也有一些答案与UI线程阻塞有关。实际上,此代码在主(UI)线程中运

  • 下面是我正在尝试做的事情:我正在开发一个Node.js http服务器,它将在一台机器中保存来自数万个移动客户机的长连接,以实现推送目的(与redis协作)。 测试环境: 第一次,我使用了“Express”模块,在使用swap之前,我可以达到大约120K的并发连接,这意味着RAM不够。然后,我切换到本地“HTTP”模块,我得到了大约160K的并发。但是我意识到仍然有太多的功能我不需要在原生http

  • 我查阅了关于单元素元组的文档,对它如何防止空间泄漏有点困惑,这让我怀疑我对Haskell内存模型和/或垃圾收集器的工作原理一无所知。 引用文件,他们说: Solo最重要的特性是可以强制其“外部”(通常通过模式匹配)而不强制其“内部”,因为它被定义为数据类型而不是新类型。在编写函数以从数据结构中提取值时,这可能很有用。假设您编写了数组的一个实现,并且只提供此函数来索引数组: 这实际上会导致空间泄漏。