笔记---JavaScript性能优化(二)

本文深入探讨了V8 JavaScript执行引擎的垃圾回收策略,包括分代回收、空间复制、标记清除、标记整理和增量标记等算法。新生代对象在64位系统中占用32M内存,使用复制算法进行回收;老生代对象则采用标记清除和标记整理,当新生代晋升至老生代时,若空间不足,会触发标记整理。标记增量优化了垃圾回收过程,减少JS执行的阻塞。
摘要由CSDN通过智能技术生成

V8引擎

它是JS执行引擎,即时编译,内存设限。

V8垃圾回收策略

回收的是储存在内存中堆里面的复杂数据(object array)
V8中常用的GC算法:
分代回收
空间复制
标记清除
标记整理
标记增量

V8内存分配

在这里插入图片描述
如图所示:
V8内存空间一分为二
小空间用于存储新生代对象(64位:32M 32位:16M)
新生代对象指的是存活时间较短的对象(例如局部作用域中的变量)

新生代对象回收实现

回收过程采用复制算法&标记整理
新生代的内存区分为两个等大小的空间
上图中From是使用空间,To是空闲空间
活动对象会存储于From空间
标记整理后将活动对象拷贝至To空闲空间
From与To交换空间完成释放

回收细节说明

在拷贝的过程中可能出现晋升,晋升就是将新生代对象移动至老生代对象,经过一轮GC之后仍然存活的新生代会晋升,To空间的使用率超过25%

老生代对象回收实现

老生代对象介绍

存储老生代对象空间的大小限制在64位操作系统是1.4G,32位操作系统是700M。
老生代对象指的是存活时间较长的对象(例如:全局作用域中的对象、闭包缓存的变量)

回收实现

主要采用标记清除、标记整理、增量标记算法。
首先采用的是标记清除完成垃圾空间的回收。
当新生代对象移动至老生代对象存储空间,但是老生代对象存储空间不足以盛放即将要移动过来的新生代对象的时候,会触发标记整理来消除第一步标记清除带来的空间碎片化问题。
最后采用增量标记进行效率的优化。

新生代区域的垃圾回收使用空间换时间。
老生代存储区域垃圾回收不适合复制算法。

标记增量优化垃圾回收

标记增量就是将一个完整的标记过程分成几段来完成标记。因为标记会阻碍Js代码的执行,这样做就可以让标记与js代码的执行进行交替完成。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值