zoukankan      html  css  js  c++  java
  • 关于内存泄漏

    垃圾回收机制

      首先我们要知道js的垃圾回收机制,就是找出不用的变量,释放掉其占用的内存。垃圾回收机制会按照固定的时间间隔周期性的执行。判断哪个变量没用有两个方法:标记清除和引用计数

    标记清除

      当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。
    1 function test(){
    2    var a=10;    //被标记,进入环境
    3   var b=20;    //被标记,进入环境
    4 }
    5 test();         //执行完毕之后a、b又被标记离开环境,被回收
     

    引用计数

      引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾回收器下次再运行时,它就会释放那些引用次数为0的值所占用的内存。
    1 function test(){
    2   var a={};  //a的引用次数为0
    3   var b=a;   //a的引用次数加1,为1
    4   var c=a;   //a的引用次数加1,为2
    5    var b={};  //a的引用次数减1,为1
    6 }

    哪些操作会造成内存泄漏?

    1、意外的全局变量引起的内存泄漏(定义在函数的全局变量)
    2、闭包引起(闭包可以维持函数内部的局部变量,使其不得释放)
    3、没有清理的DOM元素引用
    4、被遗忘的定时器或者回调

       参考自:https://blog.csdn.net/michael8512/article/details/77888000

  • 相关阅读:
    hibernate关联关系(多对多)
    hibernate关联关系(一对多)
    hibernate主键生成策略
    hibernate01
    利用Struts2拦截器完成文件上传功能
    layui的CRUD案列
    Struts2的CRUD
    Git中.gitignore文件不起作用
    在 Visual Studio 中使用 Q# 进行量子编程
    Elasticsearch 搜索
  • 原文地址:https://www.cnblogs.com/aizz/p/9329691.html
Copyright © 2011-2022 走看看