V8引擎如何回收
一.为什么要关注内存
1.防止页面占用内存过大,引起客户端卡顿,甚至无响应
2.Node使用的也是V8,内存对于后端服务的性能至关重要,因为服务的持久性,后端更容易造成内存溢出
——>一般考虑大文件上传项目
二.V8部分组成
1) V8内存分配
1.Stack栈通常是执行环境
2.Heap memory堆内存负责垃圾回收机制
1.New space 新生代
严格分为两个空间:Semi space From和Semi space To
2.Old space 旧生代
连续空间:Old pointer space——>指针,引用;Old data space——>原始对象
如果项目过大会存放在large object space当中
代码空间,即时编译器(JIT)存放于code space JS代码运行环境
属性单元空间:Cell space,Property cell space,Map space
三.空间大小
1.64位操作系统为1464MB,32位操作系统为732MB
2.64位新生代64MB,老生代1400MB
3.32位新生代32MB,老生代700MB
4.最新版node.js(V14),2GB
四.产品定位
1.先有JS,再有node
2.JS为了浏览器渲染
3.JS/Node.js存在区别异步单线程
4.Node.js(底层C++,可以通过底层代码修改内存空间)读写大文件,Webpack//Vit编译大型项目都存在内存空间占用1.4G
5.垃圾回收机制 运行线程——>回收1.5G内存 50ms以上,运行代码和回收垃圾存在冲突
五.垃圾回收算法
1.新生代Scavenge算法
2.老生代标记整理清除Mark-Sweep(标记清除),Mark-Compact(标记整理)
3.变量存放在新生代,满足条件会晋升
定义复杂变量object 1存放在From空间,存放变量a,b,c,删变量abc,给与变量标记