V8内存

2020-05-26  本文已影响0人  脆脆鲨765

为什么要关注内存

“页面无响应”内存占太多,太卡

  1. 防止页面占用内存过大,引起客户端卡顿,甚至无响应;
  2. Node使用的也是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. 操作大文件
上一篇 下一篇

猜你喜欢

热点阅读