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

    两种垃圾回收机制

    1 引用计数法

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

    2 标记清除法的回收机制

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

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

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

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

    标记阶段

     

    img

     

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

     

    img

     

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

     

    img

     

    清除阶段

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

    3 什么是内存泄漏

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

    内存泄漏的实例

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

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

  • 相关阅读:
    linux cat 文件操作
    linux 如何显示一个文件的某几行(中间几行)
    dvm进程,linux进程,应用程序进程是否同一概念
    android-----JNI中的log打印
    push代码到github时,每次都要输入用户名和密码的问题
    linux下ndk编译命令行程序及配置
    Ubuntu16.04安装openjdk-7-jdk
    JNI——访问数组
    转:MyBatis学习总结(Mybatis总结精华文章)
    转:mybatis3中@SelectProvider的使用技巧
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14843878.html
Copyright © 2011-2022 走看看