JS进阶--内存管理

一、管理内存的意义

1. 减少浏览器的负担

内存过大 就会让浏览器卡顿\无响应

2. Node端

而Node.js开启的服务,内存占用太多,导致不够用,服务器就会中断

二、内存的数据储存

1. 内存的分类

栈内存

从上往下的堆叠,只有一个进出口,线性、连续
在这里插入图片描述

堆内存

是树状的,非线性的数据结构,每一个点都是一个内存地址,不一定是连续的, 是反复的
在这里插入图片描述

2. 数据的存储

普通类型变量的储存

字符串、数字、布尔值、非引用类型的数据是直接储存到栈内存之中,变量直接指向值

方法、对象、数组等引用类型

方法、对象、数组等引用类型的储存会先在堆内存中开辟一个地址存放,而后如果有将方法、对象、数组等引用类型进行了赋值给变量的操作,就会在栈内存中存放,变量直接指向之前开辟的地址
在这里插入图片描述

3. v8内存的管理

v8有多大

  1. 64位下有1.4G(分配:分为新生代和老生代;新生代储存短时间存活的新变量,其内存量极小,64位下大概是32MB;生存时间较长的变量会转存到老生代,老生代基本占据所有内存,64位下大概1400MB。
    在这里插入图片描述

  2. 32位下700MB

  3. 根据浏览器的不同,有些许扩容。Node情况下会有一些C++内存扩容

新生代的回收算法

新生代的空间分为:
当前被使用的空间—from空间;完全空白的空间-----to空间。
在使用变量的过程中,逐渐会有变量失去作用,在下一次变量回收的时候,会把没有失去作用的变量,复制到to空间之中,而后 清空from空间,最后from与to对调,最后还是from空间正在使用,to空间完全空白。这样做提升了回收的速度,属于典型的牺牲空间换时间。动作可以简单概括成:复制–清空;

老生代的回收算法

老生代的空间较大不能和新生代操作相同,否则会造成较大空间浪费
具体步骤为:①. 标记已死变量;②. 清除已死变量;③. 整理磁盘(清除已死变量位置的内存空隙,确保内存的最大化利用)。

触发回收的时机

  1. 执行完代码时
    在这里插入图片描述

  2. 内存不够时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊胡咧咧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值