【问题标题】:Can new Date() case a memory leak in node.js?new Date() 可以处理 node.js 中的内存泄漏吗?
【发布时间】:2013-11-10 04:27:02
【问题描述】:

在这个第一个示例中,我正在更新一个现有的 MongoDB 文档。 date: new Date() 会导致内存泄漏吗?如果不是,为什么? 我在某处读到,每当您使用 new 关键字分配新对象时,您必须自己解除分配。

var update = {
  $inc: { wins: 1 },
  $push: { pastMatches: { date: new Date, winner: winner, loser: loser } }
};
Character.update({ characterId: winner }, update);

在这个第二个示例中,我使用以下 Express.js 中间件进行错误记录。如果您每次在应用程序路由中出现错误时调用此代码,是否会导致内存泄漏? new Date() 是否会被垃圾收集?

app.use(function(err, req, res, next) {
  console.error(new Date, err);
  res.send(500);
});

谢谢!我正在尝试追踪我的应用程序中的内存泄漏,这些是一些让我印象深刻的示例。

【问题讨论】:

  • JavaScript 是一个垃圾收集运行时,所以不,您不必自己解除分配对象。但是,您必须避免“固定”它们。控制台机制本身将坐在这样传递的引用上并非不可能。你触发了多少错误? Date 实例不应该很大。
  • 我在某处读到,每当你使用 new 关键字分配一个新对象时,你必须自己解除分配。 -> 你确定这是关于 JavaScript 而不是 C++?跨度>
  • 为什么这些特定的代码行在候选中脱颖而出?如果您正在使用您建议的所有移动部件,那么还有数以万计的其他代码行正在执行。
  • 还有——内存泄漏的本质是什么?你如何重现它?
  • 我想可能在 gridfs-stream 实现中的某个地方存在错误,但如果没有对应用程序进行更深入的分析,我不想推测。您将需要针对应用程序的各个方面编写一些测试,以帮助您确定崩溃的根本原因。

标签: javascript node.js memory-leaks express


【解决方案1】:

这两个对我来说看起来都非常友好。寻找用作缓存的对象、不断附加的数组等。您还应该确保确实存在内存泄漏,而不仅仅是 v8 使用了大量内存。尝试通过更小、更具体的网络应用使用来重现稳定的内存增长,以缩小范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2012-03-04
    • 2012-03-11
    • 2016-01-01
    相关资源
    最近更新 更多