V8内存
为什么要关注内存
“页面无响应”内存占太多,太卡
- 防止页面占用内存过大,引起客户端卡顿,甚至无响应;
- Node使用的也是V8,内存对于后端服务的性能至关重要。因为服务的持久性,后端更容易造成内存溢出,内存超出,服务就宕掉了;
【V8内存】V8引擎内存回收机制
- 新生代内存空间
- From
- To
- 老生代内存空间
- 总大小:操作系统64位 1.4G,32位0.7G
- 新生代:操作系统64位 64MB,32位16MB
- 老生代:操作系统16位 1400MB,32位700MB
- js设计支出是为浏览器设计,前端特点-不持久化,js代码执行一遍后,不用的就全部回收了。
- js回收内存时会暂停代码执行;js回收100MB垃圾,需要6ms。如果过大,则回收的内容也多,将会非常耗时。
- 新生代简单的说就是复制,存放新产生的变量。首先存放在From空间,满足一定条件后,将还活着的变量复制到To中。然后清空From空间(全部清空节省时间)。往后,To变为From,之前清空的From变成新的To)。牺牲空间换时间。牺牲一半空间,总有一半空间是空的。
- 老生代:标记、删除、整理
- 新生代占用超过25%就转为老生代
- 标记:先标记死掉的变量
- 删除标记过的变量
- 整理空间(同理于电脑磁盘碎片整理)让内存连续起来(数组在内存中存储必须是连续空间,所以必须要整理)
- 定义一个变量,全都在新生代From空间 ==》变量是否被回收过 ==》yes 进入老生带 ==》 no 进入新生代To空间
- 定义一个变量,全都在新生代From空间 ==》 To空间是否已经使用过25%() ==》 yes 进入老生带 == 》 进入新生代To空间
windoe.performance // 查看内存使用情况
Node- process.memoryUsage()
容易引发内存使用不当的情景
- 滥用全局变量
- 缓存不限制
- 操作大文件
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 我要做大厨
- 为什么你的路演总会超时()
- 这辈子我们都不要再联系了
- 眼光要放高远
- 财商智慧课(六)
- 我们重新了解付费。
- 吃了早餐,反而容易饿(为什么?)
- 我要我们在一起(二)
- 螃蟹和这些食物同吃,轻则腹泻、重则中毒!要小心哦~