我喜欢JavaScript的松散输入。
说实话,我很少考虑使用它时的内存管理。
创建变量时,即使在JS中,也会为该变量分配一定量的内存。但是,JavaScript中的变量是可变的。当变量从一种类型更改为另一种类型时会发生什么?
例如:
var a = "hello world"; //~22 bytes
a = 10; //now 'a' is only 8 bytes
剩余的14个字节是否被垃圾收集?或者这会导致内存泄漏吗?
答案 0 :(得分:1)
不,JavaScript语言中没有内存泄漏(根本没有任何内存分配任务)。
如果某个实现在显示的代码上有内存泄漏,那么(非常)错误。
底层引擎中的某些对象很可能完全被一个新对象替换,并且逻辑"引用"被重新安置为替换对象。
答案 1 :(得分:1)
没有。基本上所有这些语言中的变量都实现为对堆中的类型化内存缓冲区的引用。更改值时,只需更改变量以引用堆中的另一个对象。如果变量是对象的最后一个引用,那么使用任何引用计数/垃圾收集机制最终应该启动并释放该堆内存。
上面唯一的例外是,在某些语言运行时中,具有固定大小的简单类型(如布尔值,整数和浮点数)直接存储在""变量;即通常包含指向堆的指针的字段包含数据,并以某种方式标记为这样。