js垃圾回收(引用计数算法、标记清除算法、v8垃圾回收机制、浏览器性能监控、任务管理器、内存分析、JSBench)

目录

垃圾

可达对象

GC算法(垃圾回收机制)

引用计数算法

优点

缺点

标记清除算法

优点

缺点

标记整理算法

优点

缺点

V8

V8垃圾回收

新生代对象回收 

晋升条件

老生代对象回收

性能监控Performance

浏览器任务管理器

内存分析

​编辑

JSBench(代码测试网站)


垃圾

对象不再被引用时是垃圾;

对象不能从根(全局)上访问到时是垃圾;

可达对象

在一个作用域链上,只要通过根可以有路径查找到的对象都是可达对象。

可以访问到的对象就是可达对象(可以通过引用、作用域链查找到)
可达的标准就是从根(全局)出发是否能够被找到
 

GC算法(垃圾回收机制)

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

引用计数算法

设置引用数,判断当前引用数是否为0。

优点

可以即时回收垃圾对象。

减少程序卡顿时间。

缺点

无法回收循环引用的对象

时间开销大

标记清除算法

分标记和清除二个阶段完成

遍历所有对象找标记活动对象(非垃圾)。

遍历所有对象清除没有标记对象。

优点

可以解决引用计数中的循环引用的问题。

缺点

容易产生碎片化空间,不能得到最大化利用。

不会立即回收垃圾对象。

标记整理算法

可以看做是标记清除的增强;

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

清除阶段会先执行整理,移动对象位置(整理对象使垃圾被释放后空间连续)

优点

减少碎片化空间。

缺点

不会立即回收垃圾对象。

V8

一款主流JavaScript执行引擎,采用即时编译,内存设限(64位操作系统为1.5G,32位操作系统为800MB )

V8垃圾回收

V8将内存空间一分为二,新生代对象(存活时间较短的对象)存储区(被分为From和To两个等大小空间)和老生代存储区,如下图:

 回收过程采用复制算法+标记整理。

新生代对象回收 

活动对象存储于From空间,标记整理后将活动对象拷贝至To,From与To交换空间完成释放。

拷贝过程中可能出现晋升(将新生代对象移动至老生代)

晋升条件

一轮GC还存活的新生代需要晋升

To空间的使用率超过25%需要晋升

老生代对象回收

主要采用标记清除、标记整理、增量标记算法。

首先使用标记清除完成垃圾空间的回收。

当新生代对象晋升且老生代空间不足时会采用标记整理进行空间优化。

增量标记用于进行效率优化。

性能监控Performance

google浏览器控制台下的performance板块,可以录制交互或页面加载过程的性能变化。 

浏览器任务管理器

使用Shift+Esc打开,在该面板上右击鼠标可以选择需要显示的内容例如JavaScript使用过的内存。

上图中内存占用空间表示DOM节点所占据的大小;

JavaScript使用的内存表示为为js中的堆大小,括号中的大小为所有可达对象当前使用的大小。

内存分析

 

JSBench(代码测试网站)

JSBench.me - JavaScript performance benchmarking playground

JavaScript代码执行快慢测试网站

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值