JavaScript 原始类型是否垃圾收集?

Ani*_*yan 2 javascript garbage-collection

我知道在 Java 和 C# 中,垃圾收集器仅适用于引用类型(不适用于原始类型)并且仅适用于堆,因为 Java 和 C# 中的对象存储在堆中。

JavaScript 中的引用类型(数组、对象、函数)存储在堆中,原始类型(数字、布尔值、字符串、未定义、空值)存储在堆栈中。这是一个关于这个的链接

在 JavaScript 中有几种垃圾收集器算法,其主要原则是引用计数。这些算法是 Mark-and-Sweep 和 Reference Counting(现代算法是 Mark-and-Sweep)。算法计数引用,原始类型没有引用,我猜它们不能被垃圾收集。

在文章中没有关于如何释放 JavaScript 原始类型的字样。我的观点是当当前执行上下文完成它的工作时它被释放。

那么 JavaScript 实际上是如何管理原始类型变量的内存的呢?

Jör*_*tag 5

ECMAScript 语言规范中没有任何内容说明原语不会被垃圾收集。同样,规范中也没有任何内容说 Primitives 是垃圾收集的。事实上,规范中也没有说对象是垃圾收集的。

实际上,规范根本没有提及内存管理。例如,不使用堆栈的实现将是完全兼容的。

所以,简短的回答是:你无法知道 Primitives 是否被垃圾收集,因为规范允许两者。