JavaScript真的不需要关注内存管理吗

43 阅读1分钟

js中原始数据类型是存放在栈空间的,引用数据类型是存放在堆空间的

有些数据被使用之后就不再需要了我们把这些数据称为垃圾数据,如果这些垃圾数据一直保存在内存中,就会导致内存数据过多,我们需要对这些垃圾数据回收,用以释放有限的内存空间。

JavaScript采用自动回收垃圾的策略,也就是说产生的垃圾数据是通过垃圾回收器来释放的,不需要通过代码手动去释放。

也正是这个自动回收策略给使用者带来了困惑,也让一些 JavaScript 开发者误以为可以不关心内存管理,这是一个很大的误解。

调用栈中的数据是如何回收的

当一个函数执行结束之后,JavaScript 引擎会通过向下移动 ESP 来销毁该函数保存在栈中的执行上下文。

堆中的数据是如何回收的

代际假说有以下两个特点:第一个是大部分对象在内存中存在的时间很短,简单来说,就是很多对象一经分配内存,很快就变得不可访问;第二个是不死的对象,会活得更久。

垃圾回收器的工作流程现在你知道了 V8 把堆分成两个区域——新生代和老生代,并分别使用两个不同的垃圾回收器。其实不论什么类型的垃圾回收器,它们都有一套共同的执行流程。

此文章为10月Day017学习笔记,内容来源于极客时间《浏览器原理与实践》,强烈推荐该课程