javascript - JavaScript 原始类型是否被垃圾收集?
问题描述
我知道在 Java 和 C# 中,垃圾收集器仅适用于引用类型(不适用于原始类型)并且仅适用于堆,因为 Java 和 C# 中的对象存储在堆中。
JavaScript 呢,引用类型(数组、对象、函数)存储在堆中,原始类型(数字、布尔值、字符串、未定义、空)存储在堆栈中。这是一个关于那个的链接。
在 JavaScript 中有几种垃圾收集器算法,其主要原理是引用计数。这些算法是 Mark-and-Sweep 和 Reference Counting(现代算法是 Mark-and-Sweep)。算法计数引用和原始类型没有引用,我猜它们不能被垃圾收集。
在文章中没有关于如何释放 JavaScript 原始类型的消息。我的观点是,当当前执行上下文完成其工作时,它就会被释放。
那么 JavaScript 是如何实际管理原始类型变量的内存的呢?
解决方案
ECMAScript 语言规范中没有任何内容说 Primitives 不是垃圾收集的。同样,规范中没有任何内容说 Primitives 是垃圾收集的。事实上,规范中也没有说对象是垃圾收集的。
实际上,规范根本没有提到内存管理。例如,不使用堆栈的实现将完全兼容。
所以,简短的回答是:你不知道 Primitives 是否被垃圾收集,因为规范允许两者。
推荐阅读
- c - 指针指向的两个内存位置的 OR 操作
- python - 如何使用python计算传出数据包的数量
- java - 如何使用 maven-publish gradle 插件附加 AAR 文件的源?
- reactjs - React Konva:onClick()未在功能组件中触发
- python - 异步 asyncio Django 命令按顺序运行
- python - 为什么在合并这两个数据帧时,其中一列充满了 NAN?
- c# - 修复正则表达式以具有字符限制
- javascript - 如何用酶测试瓶盖?
- facebook - 如何使用 Watson Assistant 登录 Facebook Webhooks?用于切换协议
- c# - 通过输入格式化程序将正文发布到参数