首页 > 解决方案 > JavaScript 原始类型是否被垃圾收集?

问题描述

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

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

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

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

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

标签: javascriptgarbage-collection

解决方案


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

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

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


推荐阅读