在 Node.js 中,数据何时存储在堆中?

Posted

技术标签:

【中文标题】在 Node.js 中,数据何时存储在堆中?【英文标题】:In Node.js, when is data stored on the heap? 【发布时间】:2015-09-21 12:45:34 【问题描述】:

在 C 中,您明确要求并管理堆上的内存,因此与堆的交互是明确定义/明显的。你是如何在 Node.js 中推理的?

子问题:

函数存储在哪里/如何存储? 是否有某些对象/原语总是存储在堆上? (例如缓冲区) 数据是否从堆栈迁移到堆?什么时候?

也非常感谢您提供有关此主题的优质资源的参考,谢谢。

【问题讨论】:

对此的回答肯定有助于在开发过程中定位可能的内存泄漏。好问题。 【参考方案1】:

您不关心堆栈与堆,也不关心释放内存。因为 Node.js 提供了一个精确的跟踪垃圾收集器,所以它会自动发生。一些数据存储在 GC 堆中。一些数据在堆栈上。您通常无法分辨,因为它取决于 JIT 编译器在运行时执行的优化。分析工具可能会提供特定于应用程序的洞察力。

对于内存以外的资源(例如文件和套接字),使用finally

var file = open(…);
try 
    …
 finally 
    close(file);

【讨论】:

我认为你的意思是“你不应该关心堆栈与堆”......显然有些人确实关心,否则这不会是问题。 @rightfold 我对概念化运行时如何做出这些决定以便在开发过程中理解/承认它更感兴趣。显然你可以把它当作一个黑匣子,但我认为理解这一点对大多数 Node.js 开发者来说应该是有用的。

以上是关于在 Node.js 中,数据何时存储在堆中?的主要内容,如果未能解决你的问题,请参考以下文章

值类型何时存储在堆栈(C#)中?

在 C++ 中正确使用堆栈和堆?

c语言里啥变量存储在堆中啥变量存储在栈中啊!

Java中数组对象的存储位置?

c语言里啥变量存储在堆中啥变量存储在栈中啊!

JS中变量存储在堆中还是栈中?(深入内存原理)