解题思路

得分点

栈垃圾回收、堆垃圾回收、新生区老生区、Scavenge算法、标记-清除算法、标记-整理算法、全停顿、增量标记

标准回答

浏览器垃圾回收机制根据数据的存储方式分为栈垃圾回收和堆垃圾回收。 栈垃圾回收的方式非常简便,当一个函数执行结束之后,JavaScript 引擎会通过向下移动 ESP 来销毁该函数保存在栈中的执行上下文,遵循先进后出的原则。 堆垃圾回收,当函数直接结束,栈空间处理完成了,但是堆空间的数据虽然没有被引用,但是还是存储在堆空间中,需要垃圾回收器将堆空间中的垃圾数据回收。为了使垃圾回收达到更好的效果,根据对象的生命周期不一样,使用不同的垃圾回收的算法。在 V8 中会把堆分为新生代和老生代两个区域,新生代中存放的是生存时间短的对象,老生代中存放的生存时间久的对象。新生区中使用Scavenge算法,老生区中使用标记-清除算法和标记-整理算法。

加分回答

Scavenge算法:

1. 标记:对对象区域中的垃圾进行标记

2. 清除垃圾数据和整理碎片化内存:副垃圾回收器会把这些存活的对象复制到空闲区域中,并且有序的排列起来,复制后空闲区域就没有内存碎片了

3. 角色翻转:完成复制后,对象区域与空闲区域进行角色翻转,也就是原来的对象区域变成空闲区域,原来的空闲区域变成了对象区域,这样就完成了垃圾对象的回收操作,同时这种角色翻转的操作还能让新生代中的这两块区域无限重复使用下去

标记-清除算法:

1. 标记:标记阶段就是从一组根元素开始,递归遍历这组根元素,在这个遍历过程中,能到达的元素称为活动对象,没有到达的元素就可以判断为垃圾数据。

2. 清除:将垃圾数据进行清除。

3. 产生内存碎片:对一块内存多次执行标记 - 清除算法后,会产生大量不连续的内存碎片。而碎片过多会导致大对象无法分配到足够的连续内存。

标记-整理算法

1. 标记:和标记 - 清除的标记过程一样,从一组根元素开始,递归遍历这组根元素,在这个遍历过程中,能到达的元素标记为活动对象。

2. 整理:让所有存活的对象都向内存的一端移动

3. 清除:清理掉端边界以外的内存 V8 是使用副垃圾回收器和主垃圾回收器处理垃圾回收的,不过由于 JavaScript 是运行在主线程之上的,一旦执行垃圾回收算法,都需要将正在执行的 JavaScript 脚本暂停下来,待垃圾回收完毕后再恢复脚本执行。

我们把这种行为叫做全停顿。 为了降低老生代的垃圾回收而造成的卡顿,V8 将标记过程分为一个个的子标记过程,同时让垃圾回收标记和 JavaScript 应用逻辑交替进行,直到标记阶段完成,我们把这个算法称为增量标记(Incremental Marking)算法

说一下浏览器垃圾回收机制?相关推荐

  1. 9.浏览器原理之浏览器垃圾回收机制

    目录 1.浏览器的垃圾回收机制 1)垃圾回收的概念 2)垃圾回收的方式 2.哪些操作会造成内存泄漏 1.浏览器的垃圾回收机制 1)垃圾回收的概念 垃圾回收:Javascript代码运行时,需要分配内存 ...

  2. 深入理解浏览器垃圾回收机制

    1. JavaScript 内存管理机制 计算机程序语言都运行在对应的代码引擎上,其使用内存过程可以分为以下三个步骤: 分配所需要的系统内存空间: 使用分配到的内存进行读或写等操作: 不需要使用内存时 ...

  3. 浏览器的垃圾回收机制

    垃圾回收机制 垃圾收集器必须跟踪哪个变量有用哪个变量没用,对于不再有用的变量打上标记,以备将来收回其占用的内存,内存泄露和浏览器实现的垃圾回收机制息息相关, 而浏览器实现标识无用变量的策略主要有下两个 ...

  4. 浏览器(V8)的垃圾回收机制

    文章目录 内存管理 什么是浏览器中的垃圾? 常见的GC算法 一. 引用计数 二. 标记清除 三. 标记整理 V8内核 V8的垃圾回收策略 V8内存分配 新生代区域及算法 老生代区域及算法 内存管理 在 ...

  5. 谈谈垃圾回收机制方式及内存管理

    回收机制方式 1.定义和用法:垃圾回收机制(GC:Garbage Collection),执行环境负责管理代码执行过程中使用的内存. 2.原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然 ...

  6. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  7. Node的垃圾回收机制与内存溢出捕获(上)

    Node的垃圾回收机制与内存溢出捕获 一.什么是Node的内存?   想必大家在用JavaScript开发的过程中,不太关心内存的管理,因为对于前端来说,浏览器的内存几乎不会出现用完的情况,因为所接触 ...

  8. javascript的垃圾回收机制

    一.垃圾回收的必要性 下面这段话引自<JavaScript权威指南(第四版)> 由于字符串.对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配.JavaScrip ...

  9. javascript的垃圾回收机制指的是什么?

    javascript的垃圾回收机制指的是什么?你了解吗?本文小编给大家详细解读一下! 定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束. 像 C 这样的编程语言,具有低级内存管理原语 ...

最新文章

  1. 求任意数阶乘最后一位
  2. 联想e480一键恢复小孔_圆满收官,联想发布数款超智能电脑及平板产品
  3. IOS 学习资料汇总(^_^)
  4. Ubuntu安装 到移动硬盘--操作系统随身携带
  5. 【童年回忆】【FC模拟器 + ROM大合集下载】
  6. JVM源码分析-Java运行
  7. linux 批量kill java进程
  8. python开发Day05(计算器代码)
  9. LeetCode 756. 金字塔转换矩阵(回溯)
  10. PostgreSQL+安装及常见问题
  11. 30个Python小游戏,小白练手,我都能玩一天【内附源码】
  12. Jmeter接口压力测试学习总结
  13. 测试ips显示器的软件,IPS屏幕显示测试
  14. echart柱状图和折线图混合
  15. 科技爱好者周刊(第 108 期):阵地战与奇袭战
  16. 另类神秘幽浮飞棍之迷已被解开
  17. Java网页数据抓取实例
  18. leetcode-cpp 535.TinyURL的加密和解密
  19. java加减法验证码_Java,Springboot 实现算法验证码加减法图形验证码,Kaptcha 实现加减法验证码...
  20. Windows 最值得推荐的“神器”,看看你中了几个?

热门文章

  1. 20191129每周精品之编程
  2. 我对移动端架构的思考
  3. 关于数学计算机手抄报简单的,关于数学的手抄报简单
  4. 【方法/函数】 矩阵相乘
  5. 键盘修改器,绝对管用
  6. 怎么删除淘宝足迹 淘宝足迹多久才能形成
  7. select 函数使用方法
  8. 什么是抽象类和抽象方法,以及他们的特点
  9. 计算机系统文件命名规则,电脑新建文件夹等的默认命名如何修改?[多图]
  10. 前端html标签拨打电话