zoukankan      html  css  js  c++  java
  • JavaScript垃圾回收机制和闭包

    两种垃圾回收机制

    1 引用计数法

           缺点   对于循环引用将会导致GC无法回收“应该被回收”的内存。造成了无意义的内存占用,也就是内存泄漏。 

    2 标记清除法的回收机制

    在变量进入执行环境时,会添加一个进入标记,当变量离开时,会添加一个离开标记,

    标记清除是GC在运行时会给所有变量加上标记,然后去掉那些还在环境中或还被环境中变量引用的变量,清除剩下还被标记的所有变量

    • 标记阶段:把所有活动对象做上标记。

    • 清除阶段:把没有标记(也就是非活动对象)销毁。

    标记阶段

     

    img

     

    可以理解成我们的全局作用域,GC从全局作用域的变量,沿作用域逐层往里遍历(对,是深度遍历),当遍历到堆中对象时,说明该对象被引用着,则打上一个标记,继续递归遍历(因为肯定存在堆中对象引用另一个堆中对象),直到遍历到最后一个(最深的一层作用域)节点。

     

    img

     

    标记完成之后,就是这样的:

     

    img

     

    清除阶段

    又要遍历,这次是遍历整个堆,回收没有打上标记的对象

    3 什么是内存泄漏

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

    内存泄漏的实例

    使用不当的闭包将会在IE(IE9之前)中造成内存泄漏

    IE9的JavaScript引擎使用的垃圾回收算法是引用计数法,对于循环引用将会导致GC无法回收“应该被回收”的内存。造成了无意义的内存占用,也就是内存泄漏。

  • 相关阅读:
    程序设计思维与实践 Week5 作业 (3/4/数据班)
    程序设计思维与实践 Week6 作业 (3/4/数据班)
    Effective C++笔记(更新中...)
    二叉树的序列化与反序列化
    矩阵乘法的顺序安排问题 Python简单实现
    Python 读写Excel文件 总结
    2019美赛D题 人员疏散模型Python编程
    函数绘图语言 西电编译原理大作业
    洛谷试炼场 动态规划专练
    2019 IEEEXtreme 13.0 Impact Factor 影响因子
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14843878.html
Copyright © 2011-2022 走看看