【发布时间】:2017-05-16 23:00:10
【问题描述】:
我喜欢 JavaScript 的松散类型。
不过说实话,我在使用它时很少考虑内存管理。
创建变量时,即使在 JS 中,也会为该变量分配一定数量的内存。然而,JavaScript 中的变量是可变的。当变量从一种类型更改为另一种类型时会发生什么?
例如:
var a = "hello world"; //~22 bytes
a = 10; //now 'a' is only 8 bytes
剩余的 14 个字节会被垃圾回收吗?还是这会导致内存泄漏?
【问题讨论】:
-
奇怪的问题。如果像这样的简单代码导致内存泄漏,那么您如何在计算机不死机的情况下使用大多数网站?
-
没有。基本上所有此类语言中的变量都是作为对堆中类型化内存缓冲区的引用来实现的。当值改变时,变量只是简单地改变以引用堆中的另一个对象。如果变量是对对象的最后一个引用,那么无论使用什么引用计数/垃圾收集机制,最终都应该启动并释放该堆内存。
-
上述唯一的例外是,在某些语言运行时中,具有固定大小的简单类型(如布尔值、整数和浮点数)直接存储在变量“中”;即通常包含指向堆的指针的字段包含数据并且以某种方式标记为这样。
-
@Linuxios: ↓↓↓↓↓↓
-
@boundry:你指的是什么?我已经赞成你的回答;我只是想我会添加一些关于机制的内容。
标签: javascript memory-management memory-leaks