好书推荐:
    image.png

    JS数据类型:
    原始数据类型: string, number, boolean, null, undefined, Symbol

    引用数据类型: Object

    内存空间: 栈内存 (stack),堆内存(heap)

    image.png

    image.png

    image.png
    定义一个函数,其代码部分以字符串的形式存在于堆内存中,并将函数名指向该内存地址。

    JS垃圾回收:
    策略1:
    引用计数: 跟踪记录每个值被引用的次数,如果一个值的引用次数是0,就表示这个值不在用到了,因此可以将这块内存释放掉。

    原理:
    每次引用加一,被释放时减一,当这个值的引用次数变成0时,就可以将其内存空间回收。

    引用计数策略,如果存在循环引用的情况,会造成垃圾无法释放掉。

    策略2:
    标记清除:
    当变量进入环境时,这个变量标记为“进入环境”;而当变量离开环境时候,则将其标记为“离开环境”,最后,垃圾收集器完成内存清除工作,销毁哪些带标记的值并回收他们所占用的内存空间。

    执行环境:
    执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之管理啊的变量对象variable object,环境中定义的所有变量和函数都保存在这对象中。

    image.png

    image.png

    image.png

    v8内存管理机制:

    V8内存管理机制简介:
    V8是Google开源的JavaScript引擎,由C++编写,并运用在Chrome、nodejs等知名项目中。

    V8引擎以高速著称,这离不开它高效的内存管理机制。
      
    内存分代
      V8的垃圾回收策略主要基于分代式垃圾回收机制。在自动垃圾回收的演变过程中,人们发现没有一种垃圾回收算法能够胜任所有的场景。在实际应用中,对象的生存周期长短不一,不同的算法只能针对特定情况具有最好的效果。为此,统计学在垃圾回收算法的发展中产生了较大的作用,现代的垃圾回收算法中按对象的存活时间将内存的垃圾回收进行不同的分代,然后分别对不同分代的内存施以更高效的算法。

    v8回收策略:
    v8采用分代回收的策略,将内存分为两个生代,新生代和老生代;
    V8分别对新生代和老生代使用不同的垃圾回收算法来提升垃圾回收的效率;

    image.png

    image.png

    image.png

    image.png