V8垃圾回收机制

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,给与变量标记

如何查看V8内存使用

内存优化实例

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • V8的垃圾回收机制与内存限制 V8的内存限制 在一般的后端开发语言中,在基本的内存使用上没有什么限制,然而在Nod...
    Upcccz阅读 1,481评论 1 3
  • 在不断学习的过程中将学习到的知识整理成一个个知识模块,尽量保持其完整性与形成知识网络是编写这些文字的初衷。PS这是...
    littleSatr阅读 466评论 0 1
  • 关于V8 V8是一款主流的js执行引擎。它是为JS在浏览器执行而打造的。因此不会遇到大量使用内存的场景。所以它申请...
    小q阅读 508评论 0 0
  • GC算法 CG就是垃圾回收机制的简写,顾名思义就是找到内存中的垃圾、并释放和回收空间。 所谓垃圾就是程序中不再需要...
    汤姆威廉斯阅读 514评论 0 0
  • 本文引用自这里这篇文章的所有内容均来自 朴灵的《深入浅出Node.js》及A tour of V8:Garbage...
    楠小忎阅读 1,464评论 0 2