JS语言层面性能优化

小编这里说的js性能优化只是在针对js语言上的优化。
小编给大家提供一个js语言性能测试的网站:https://jsbench.me/

avaScript 内存管理

  • 内存:由可读写单元组成,表示一片可操作空间
  • 管理:人为的去操作一片空间的申请、使用和释放
  • 内存管理:开发者主动申请空间、使用空间、释放空间
  • 管理流程:申请 – 使用 – 释放

垃圾回收

  • js内存管理是自动的
    • 对象不再被引用的时候是垃圾
    • 对象不能从根上访问到的时候是垃圾
  • js中的可达对象
    • 可以访问到的对象就是可达对象(引用、作用域链
    • 可达的标准就是从根出发是否能够被找到(根可以理解为:全局变量对象)

GC算法

GC算法就是垃圾回收机制的简写,GC 找到内存中垃圾、并释放和回收空间;算法就是工作时查找和回收所遵循的规则

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

常见GC算法

  • 引用计数
  • 标记清除
  • 标记整理
  • 分代回收 V8

引用计数

// 引用计数算法实现原理(在内部使用引用计数器维护当前对象的引用数; 从而判断当前引用数是否为0;是否是一个垃圾对象)
// 核心思想:设置引用数,判断当前引用数是否为0
// 引用计数器:
// 引用关系改变时修改引用数字(当我们给一个对象赋值给一个变量时就是引用数字+1;在赋值给另一个变量就是在+1;如果删除了一个变量;就是-1;如果引用数为0;计算器就认为是垃圾;gc就会立即工作;将当前的空间进行回收)

标记清除

// 标记清除算法实现原理:
// 核心思想:将垃圾回收分为两个阶段:标记和清除连个阶段完成;第一个阶段会遍历所有对象找活动对象就行标记操作,这里的活动对象和可达对象一样;第二个阶段也是遍历所有对象;对所有没有标记的对象进行清除;同时也会把第一次循环之后的标记给抹掉,为了保证GC下一次正常的工作;回收相应的空间;把回收的空间放到空闲列表中;以供后面的程序申请空间使用。

// 标记清楚算法优点:可以解决循环引用的情况。缺点:空间的碎片化:由于我们这种回收的空间都是不连续的;当我们使用这片空间的时候有时候会出现不够或者多了的情况;这就是空间的碎片化。

标记整理

// 标记整理算法实现原理
// 标记整理可以看做是标记清除的增强操作;第一步都是遍历所有对象然后就行标记操作;第二部会先执行整理;移动对象位置;让他们在地址上产生连续。

V8

// V8是一款主流的JavaScript执行引擎
// V8采用即时编译
// V8内存设限(有上限) :对于64位操作系统不超过1.5G;对于32位操作系统的话;不超过800M。设限原因:V8是为浏览器而设计的;所以现有的内存大小对网页来讲也是够用的;V8的内部的垃圾回收机制也决定了采用设限也是合理的

// V8垃圾回收策略
// 采用分代回收的思想:内存分为新生代存储区、老生代存储区;针对不同对象采用不同GC算法
// V8常用GC算法:分代回收、空间复制、标记清除、标记整理、标记增量
// V8内存空间一分为二,小空间用于存储新生代对象(32M|16M) ;新生代指的是存活时间较短的对象
// 新生代对象回收实现:回收过程采用复制算法+标记整理:新生代内存区分为两个等大小空间;使用空间为From,空闲空间为To;活动对象存储于From空间,当我们活动对象完成操作之后;就会触发GC操作,采用标记整理操作来对我们活动对象进行操作;然后将活动对象拷贝至To空间;From空间直接释放掉。回收细节说明:拷贝过程中可能出现晋升,晋升就是将新生代对象移动至老生代;晋升的标准就是:一轮GC后还存活的新生代需要晋升放到老生代存储区,To空间的使用率超过了25%;也要晋升到老生代存储区。
// 老生代对象存放在右侧老生代区域,64位操作系统当中1.4G,32位操作系统700M;指的就是存活时间较长的对象。例如(全局作用域下存放的变量;或者闭包存放的数据)
// 老年代对象回收实现:主要才用了标记清除、标记整理、增量标记算法。首先使用标记清除完成垃圾空间的回收,采用标记整理进行空间优化;采用增量标记进行效率优化。
// 新生代和老生代对比:新生代区域垃圾回收使用空间换时间;老年代quy7u垃圾回收不适合复制算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值