Javascript 的内存管理

breakpoints 2020-02-21

js中垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地执行这一操作:找出那些不再继续使用的变量,然后释放其占用的内存。

1.引用计数法

原理:当JavaScript代码生成一个新的内存驻留项时(比如一个对象或函数),系统就会为这个项留出一块内存空间。因为这个对象可能会被传递给很多函数,并且会被指定给很多变量,所以很多代码都会指向这个对象的内存空间。JavaScript会跟踪这些指针,当最后一个指针废弃不用时,这个对象占用的内存会被释放。

缺点:

    -内存泄漏问题(内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果)

    -循环引用问题

2.标记清除法

    //标记清除算法由以下步骤组成:

    -垃圾回收器构建"roots"列表。Roots通常是代码中保留引用的全局变量。在JavaScript中,"window"对象可以作为 root 全局变量示例。

    -所有的"roots"被检查并标记为active(即不是垃圾)。所有的children也被递归检查。从"root"能够到达的一切都不被认为是垃圾。

    -所有为不被标记为active的内存可以被认为是垃圾了。收集器限制可以释放这些内存并将其返回到操作系统。

相关推荐