V8内存

为什么要关注内存
“页面无响应”内存占太多,太卡

  1. 防止页面占用内存过大,引起客户端卡顿,甚至无响应;
  2. Node使用的也是V8,内存对于后端服务的性能至关重要。因为服务的持久性,后端更容易造成内存溢出,内存超出,服务就宕掉了;
【V8内存】V8引擎内存回收机制
  • 新生代内存空间
  1. From
  2. To
  • 老生代内存空间
V8引擎内存有多大
  1. 总大小:操作系统64位 1.4G,32位0.7G
  2. 新生代:操作系统64位 64MB,32位16MB
  3. 老生代:操作系统16位 1400MB,32位700MB
为什么不占用更多的计算机内存
  1. js设计支出是为浏览器设计,前端特点-不持久化,js代码执行一遍后,不用的就全部回收了。
  2. js回收内存时会暂停代码执行;js回收100MB垃圾,需要6ms。如果过大,则回收的内容也多,将会非常耗时。
到底怎么回收
  1. 新生代简单的说就是复制,存放新产生的变量。首先存放在From空间,满足一定条件后,将还活着的变量复制到To中。然后清空From空间(全部清空节省时间)。往后,To变为From,之前清空的From变成新的To)。牺牲空间换时间。牺牲一半空间,总有一半空间是空的。
  2. 老生代:标记、删除、整理
  3. 新生代占用超过25%就转为老生代
  • 标记:先标记死掉的变量
  • 删除标记过的变量
  • 整理空间(同理于电脑磁盘碎片整理)让内存连续起来(数组在内存中存储必须是连续空间,所以必须要整理)
新生代怎么变成老生代
  1. 定义一个变量,全都在新生代From空间 ==》变量是否被回收过 ==》yes 进入老生带 ==》 no 进入新生代To空间
  2. 定义一个变量,全都在新生代From空间 ==》 To空间是否已经使用过25%() ==》 yes 进入老生带 == 》 进入新生代To空间
V8引擎如何处理内存?(即如何处理变量)
windoe.performance // 查看内存使用情况

Node- process.memoryUsage()

容易引发内存使用不当的情景
  1. 滥用全局变量
  2. 缓存不限制
  3. 操作大文件

    推荐阅读