GC定义与作用

  • GC就是垃圾回收机制的简写
  • GC可以找到内存中的垃圾、并释放和回收空间 

 GC里的垃圾是什么

  • 程序中不再需要使用的对象 
  • 程序中不再能访问到的对象

GC算法是什么 

  • GC是一种机制,垃圾回收器完成具体的工作
  • 工作的内容就是查找垃圾释放空间、回收空间
  • 算法就是工作时查找和回收所遵循的规则 

 常见的GC算法

  •  引用计数

    实现工作原理
  1. 核心思想:设置引用数,判断当前引用数是否为0

  2. 引用计数器

  3. 引用关系改变时修改引用数字

  4. 引用数字为0时立即回收 

        优点 

  1.  发现垃圾时立即回收
  2. 最大限度减少程序暂停

        缺点  

  1. 无法回收循环引用的对象
  2. 时间开销大
  • 标记清除

    实现工作原理
  1. 核心思想:分标记和清除二哥阶段完成

  2. 遍历所有对象找标记活动对象

  3. 遍历所有对象清除没有标记对象

  4. 回收相应的空间

    GC算法介绍(前端小常识)

    GC算法介绍(前端小常识)

    GC算法介绍(前端小常识)

    GC算法介绍(前端小常识)

         优点 

  1.  发现垃圾时立即回收

         缺点  

  1. 容易产生碎片化空间
  2. 不会立即回收垃圾对象
  • 标记整理

    实现工作原理
  1. 标记整理可以看做是标记清除的增强

  2. 标记阶段的操作和标记清除一致

  3. 清除阶段会限制性整理,移动对象位置


GC算法介绍(前端小常识)

GC算法介绍(前端小常识)

GC算法介绍(前端小常识)

         优点 

  1. 减少碎片化空间

           缺点

  1. 不会立即回收垃圾对象
  2. 移动对象位置,回收效率慢
  • 分代回收(V8 垃圾回收策略)

 认识V8

  •  什么是 V8
  1. V8 是一款主流的 JavaScript 执行引擎 
  2. V8 采用即时编译
  3. V8 内存设限
  • V8 垃圾回收策略 
  1.  采用分代回收的思想
  2. 内存分为新生代、老生代
  3. 针对不同对象采用不同算法

GC算法介绍(前端小常识)  

  •  V8 内存分配
  1.  V8内存一分为二
  2. 小空间用于存储新生代对象(32M | 16M)
  3. 新生代指的是存活时间较短的对象

GC算法介绍(前端小常识)

  • 新生代对象回收实现
  1. 回收过程采用赋值算法 + 标记整理
  2. 新生代内存区分为二个等大小空间
  3. 使用空间为 From, 空闲空间为 To
  4. 活动对象存储于  From空间
  5. 标记整理后将活动对象拷贝至 To
  6. From 与 To 交换空间完成释放

     回收细节说明:

  1. 拷贝过程中可能出现晋升
  2. 晋升就是讲新生代对象移动至老生代
  3. 一轮GC 还存活的新生代需要晋升
  4. To 空间的使用率超过25%
  •  老生代对象回收实现

       老生代对象说明 

  1. 老生代对象存放在右侧老生代区域
  2. 64位操作系统 1.4G,32操作系统 700M
  3. 老生代对象就是指存活时间较长的对象
  • 老生代对象回收实现 
  1. 主要采用标记清楚、标记整理、增量标记算法
  2. 首先使用标记清楚完成垃圾空间的回收
  3. 采用标记整理进行空间优化
  4. 采用增量标记进行效率优化  
  • 细节对比 
  1.  新生代区域垃圾回收使用空间换时间
  2. 老生代区域垃圾回收不适合赋值算法

 GC算法介绍(前端小常识)

 

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2022-01-06
  • 2021-06-20
  • 2021-06-13
  • 2021-10-15
  • 2022-01-05
猜你喜欢
  • 2021-04-08
  • 2021-06-23
  • 2022-12-23
  • 2021-10-26
  • 2021-12-14
  • 2021-07-05
相关资源
相似解决方案