前端为什么要关注内存

一:前端关注内存的原因

  1. 网页端的承载量有限,为了给用户良好的体验,我们要防止页面占用内存过大,引起客户端卡顿,甚至无响应
  2. Node.JS使用v8引擎,内存对于后端服务的性能至关重要,因为后端服务的持久性,后端更容易造成内存溢出。

二:原理分析

· 原始数据类型:字符串(string)、数字(number)、布尔(boolean)、空对象(null)、未定义(undefined)、symbol
· 引用数据类型:object
· 内存空间:栈内存(stack)、堆内存(heap)

1: 栈内存(stack)基础数据类型醋存储

2: 堆内存(heap)引用类型存储

函数体不执行,就会以代码字符串形式存储在堆内存

三 : JS的垃圾回收机制

· 垃圾回收:js找出那些不再继续使用的变量,然后释放其所占用的内存,垃圾回收器会按照固定时间间隔周期地执行这一操作

四 : javascript引擎V8的内存管理机制
· 限制内存大小
原因:
1、够用了,js设计的初衷是浏览器脚本语言,只执行一次,便释放内存
2、如果不限制,回收一次100MB的内存大概花费3ms,V8引擎在回收垃圾时,是暂停住所有代码的执行,一旦垃圾过多,在回收内存的时候,中断的时间过长,体验不佳。
· 新生代内存:保存新变量,存活时间短的
假设所有新变量都存在From中,那么在回收的过程中,会先标记活变量,将活着的变量全部复制到To当中,清空From,第二次回收时,标记活变量,将活着的变量全部复制到From当中,清空To 也就是:标记-复制-清空的过程
· 老生代内存:保存老变量,存活时间长的(老变量:经过几次垃圾回收也没有被杀死的变量)
假设在内存中有一片连续的区域:1,2,3,4,5 此时2,4死亡,标记并删除后,内存变为:1,-,3,-,5 这时内存空间会不连续,也就是所谓的内存碎片,如果不进行修补,有可能会放不进数组,因为在数据结构中,数组中的元素是储存在内存中的连续一片地址中的。所以在V8引擎中,老生代内存在标记-删除之后,还要进行一次排列,整理内存碎片。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值