zoukankan      html  css  js  c++  java
  • javascript中的垃圾回收

    1引用计数垃圾回收

    核心:跟踪记录对象被引用的次数。思路是如果一个对象A被赋值给了一个变量v,则该对象A的引用计数值加1,如果变量v又被赋予其他值了,比如a="str",则该对象A的引用计数值减1.当这个引用计数值变成0时,就表明它所占的内存空间可以被回收了。

    1 var  A={b:4};
    2 var v=A;//此时A的引用计数值为1
    3 var vv=A; //此时A的引用计数值为2
    4 v=9;//A的引用计数值为1
    5 vv="hah";//A的引用计数值为0,当垃圾收集器下次运行时,A就被回收

    如果出现了循环引用:

    1 var  A={b:4,c:null};
    2 var   B={a:4,c:null};
    3 
    4 A.c=B; //B的引用计数值为1
    5 B.c=A;//A的引用计数值为1,此时他们互相引用,就不会被回收

    2标记清除

    核心:当变量进入执行环境时,标记为“进入环境”,但变量离开环境时,标记为“离开环境“。当垃圾收集器遇到标记为”离开环境“的变量时,就将它们所占的内存空间回收。

    1 function  A(){
    2     var  a=12; //进入函数A时,预解析将a先申明,并被标记为”进入环境“
    3 }
    4 //执行完函数A后, a被标记为”离开环境“

    开心一刻:

  • 相关阅读:
    Linux从入门到进阶全集——【第十四集:Shell编程】
    cmake 编译 c++ dll 的一个例子
    %1 不是有效的Win32应用程序
    C++ 生成 dll 和调用 dll 的方法实例(转)
    Clion cmake 一个简单的 C++ 程序
    一月4
    一月4日
    1月4日
    一月4日
    一月4日
  • 原文地址:https://www.cnblogs.com/wenber/p/3630681.html
Copyright © 2011-2022 走看看