当前位置:网站首页>垃圾回收机制
垃圾回收机制
2022-06-25 10:14:00 【m0_49471668】
内存生命周期基本是一致的:
- 分配你所需要的内存
- 使用分配到的内存(读、写)
- 不需要时将其释放/归还
得分点 栈垃圾回收、堆垃圾回收、新生区老生区、Scavenge算法、标记-清除算法、标记-整理算法、全停顿、增量标记 标准回答
浏览器垃圾回收机制根据数据的存储方式分为栈垃圾回收和堆垃圾回收。
栈垃圾回收的方式非常简便,当一个函数执行结束之后,JavaScript 引擎会通过向下移动 ESP 来销毁该函数保存在栈中的执行上下文,遵循先进后出的原则。
堆垃圾回收,当函数直接结束,栈空间处理完成了,但是堆空间的数据虽然没有被引用,但是还是存储在堆空间中,需要垃圾回收器将堆空间中的垃圾数据回收。为了使垃圾回收达到更好的效果,根据对象的生命周期不一样,使用不同的垃圾回收的算法。在 V8 中会把堆分为新生代和老生代两个区域,新生代中存放的是生存时间短的对象,老生代中存放的生存时间久的对象。新生区中使用Scavenge算法,老生区中使用标记-清除算法和标记-整理算法。
加分回答
Scavenge算法: 1. 标记:对对象区域中的垃圾进行标记 2. 清除垃圾数据和整理碎片化内存:副垃圾回收器会把这些存活的对象复制到空闲区域中,并且有序的排列起来,复制后空闲区域就没有内存碎片了 3. 角色翻转:完成复制后,对象区域与空闲区域进行角色翻转,也就是原来的对象区域变成空闲区域,原来的空闲区域变成了对象区域,这样就完成了垃圾对象的回收操作,同时这种角色翻转的操作还能让新生代中的这两块区域无限重复使用下去 标记-清除算法: 1. 标记:标记阶段就是从一组根元素开始,递归遍历这组根元素,在这个遍历过程中,能到达的元素称为活动对象,没有到达的元素就可以判断为垃圾数据。 2. 清除:将垃圾数据进行清除。 3. 产生内存碎片:对一块内存多次执行标记 - 清除算法后,会产生大量不连续的内存碎片。而碎片过多会导致大对象无法分配到足够的连续内存。 标记-整理算法 1. 标记:和标记 - 清除的标记过程一样,从一组根元素开始,递归遍历这组根元素,在这个遍历过程中,能到达的元素标记为活动对象。 2. 整理:让所有存活的对象都向内存的一端移动 3. 清除:清理掉端边界以外的内存 V8 是使用副垃圾回收器和主垃圾回收器处理垃圾回收的,不过由于 JavaScript 是运行在主线程之上的,一旦执行垃圾回收算法,都需要将正在执行的 JavaScript 脚本暂停下来,待垃圾回收完毕后再恢复脚本执行。我们把这种行为叫做全停顿。 为了降低老生代的垃圾回收而造成的卡顿,V8 将标记过程分为一个个的子标记过程,同时让垃圾回收标记和 JavaScript 应用逻辑交替进行,直到标记阶段完成,我们把这个算法称为增量标记(Incremental Marking)算法
边栏推荐
- Request&Response有这一篇就够了
- Kotlin common standard functions
- Opencv learning (II) -- installing opencv on raspberry pie
- Flutter adds event listening | subscription
- ShardingSphere-Proxy 5.0 分库分表(一)
- 我希望按照我的思路盡可能將canvas基礎講明白
- [RPC] i/o model - Rector mode of bio, NiO, AIO and NiO
- How do wechat applets make their own programs? How to make small programs on wechat?
- OpenCV学习(二)---树莓派上安装opencv
- Houdini图文笔记:Your driver settings have been set to force 4x Antialiasing in OpenGL applications问题的解决
猜你喜欢
【OpenCV 例程200篇】210. 绘制直线也会有这么多坑?
How to make small programs on wechat? How to make small programs on wechat
Flask博客实战 - 实现侧边栏文章归档及标签
How to install SSL certificates in Microsoft Exchange 2010
Yolov5 changing the upper sampling mode
MCU development -- face recognition application based on esp32-cam
How do wechat applets make their own programs? How to make small programs on wechat?
Free applet making tool, how to make wechat applet
Yolov5更换上采样方式
如何在Microsoft Exchange 2010中安装SSL证书
随机推荐
Kotlin advanced - class
Unreal Engine graphics and text notes: use VAT (vertex animation texture) to make Houdini end on Houdini special effect (ue4/ue5)
我希望按照我的思路盡可能將canvas基礎講明白
How much does a wechat applet cost? Wechat applet development and production costs? Come and have a look
View. post VS Handler. Differences and usage scenarios of post
Dependent properties, dependent additional properties, and type conversions
BUG-00x bug description + resolve ways
【论文阅读|深度】Role-based network embedding via structural features reconstruction with degree-regularized
Flask blog practice - realize the latest articles and search in the sidebar
This is enough for request & response
Performance memory
OpenCV学习(一)---环境搭建
Google Earth Engine(GEE)——evaluate实现一键批量下载研究区内的所有单张影像(上海市部分区域)
Kotlin keyword and operator
Network protocol learning -- lldp protocol learning
Think about it
Webapi performance optimization
Growth: how to think deeply and learn
【论文阅读|深读】DRNE:Deep Recursive Network Embedding with Regular Equivalence
Shardingsphere proxy 4.1 Sous - base de données sous - table