/fed-e-task-01-02

拉勾课程part1 module2

Primary LanguageJavaScript

郭丽新 | Part1 | 模块二

简答题

第一题:描述引用计数的工作原理和优缺点

对每一个可达对象有一个引用计数器,当变量引用发生变化时修改其引用计数,当计数为0时立即执行垃圾回收。
优点:能立即回收垃圾,最大限度地减少程序暂停
缺点:无法回收循环引用对象,因为要不断维护计数所以时间开销较大

第二题:描述标记整理算法的工作流程

标记整理算法是对标记清除算法的增强,避免空间的碎片化,分为标记、清除两个阶段
标记阶段:遍历所有对象标记活动对象
整理清除:将所有活动对象整理到连续的内存空间,然后将非活动对象清除。

第三题:描述V8中新生代存储区垃圾回收的流程

V8将内存分为新生代和老生代存储区,针对不同的代采用不同的垃圾回收机制。
新生代存储大小为32M或16M,分为两个等大的空间 - From 和 To
From为活动对象存储区域,To为空闲区域。
回收时将From里的活动对象复制到To空间,然后释放From空间。

第四题:描述增量标记算法在何时使用,及工作原理

V8的老生代内存空间一般采用标记清除算法,可通过增量标记算法来提高整体效率。
GC的操作会阻断JS的执行,而增量标记算法将一整段的GC回收切分成多个小段分别进行,使得JS和GC的执行可以交替进行,从而提高效率

流程:

  1. 首先进行JS操作
  2. 当GC被触发时,遍历对象(老生代)进行标记,一般先标记直接可达对象进行标记,
  3. 继续JS操作
  4. 继续对象的遍历标记
  5. 循环上面操作
  6. 垃圾回收
  7. JS继续执行

代码题

见code目录