1.GC垃圾回收机制
GC全称Garbage Collection,是一种自动的存储管理机制,当一些被占用的内存不再需要时,将其释放,以让出空间,能够让程序员不用担心内存管理而导致程序出现问题,减少编程的负担。
1.为什是要进行垃圾回收?
浏览器中的程序在执行的过程中会因为内存分配以及释放问题导致内存泄露,这都是由于我们书写代码的不规范而引起的,长此以往会让浏览器中内存的不断增加,导致浏览器的性能下降,用户体验降低。所以我们需要合理的对程序中的内存进行有效的分配和释放,让那些占用内存却没有被引用的内容都进行回收,让代码能够高效的执行,浏览器稳定运行。
2.JavaScript内存管理
谈到垃圾回收,我们不得不讲起JavaScript中的数据是怎么进行储存的了,JavaScript中分为基本数据类型和引用数据类型。
- 基本数据类型的内容都是直接在栈中分配空间,而引用数据类型会在堆内存中开辟一块空间,变量引用其内存地址。
- 栈中所存数据的大小基本固定,对于其内存的分配和释放都是由系统自动执行的,而堆中的数据大小不固定,我们不能依赖系统去进行释放回收,需要借助js引擎来收到释放回收。
3.垃圾回收的原理以及使用的方法
原理:会定期找出那些不再用到的内存(变量),然后释放其内存。
方法1:标记清除法
标记清除就是会判断对象是否在活动与非活动状态,想要了解对象的活动状态,就得说起可达性了,可达性就是从根节点GC Roots开始,往下搜索子节点,子节点被搜索到了,说明该子节点的引用对象可达,并为其进行标记,然后接着递归搜索,直到所有子节点被遍历结束。那么没有被遍历到节点,也就没有被标记,也就会被当成没有被任何地方引用,就可以证明这是一个需要被释放内存的对象,可以被垃圾回收器回收。
方法2:引用计数法
使用引用技术法就相当于给对象加了一个计数器,当对象在某些地方被引用时计数器就会+1,当引用失效时计数器就会-1,当对象的引用次数为0时,此时回收器就会判定对象不再被使用,就会进行垃圾回收,从而释放掉该对象所占用的内存。