zoukankan      html  css  js  c++  java
  • js垃圾回收及内存泄漏

    js垃圾回收

    • js能够自动回收申请却未使用的内存,由于每次清除需要的性能较大,不是时时在刷新,而是每隔一段时间才进行一次。
    • 回收的两种方式
      • 标记清除(常用) 在内存中先标记变量,然后清除那些那些进入环境或者引用的变量的标记,当进入环境退出环境,将被重新标记并被清除,释放出内存。
      • 引用计数 计算变量被引用的次数,引用次数为0将被清除释放内存。 缺点:
        • 无法清除那些引用次数不为0,但又不需要的内存
           let arr = [1,2,3];
           console.log('ok');
           //数组[1,2,3]引用次数为1,但是又没用到就会一直占着内存
           //解决方式:arr.length=0
        
        • 无法解决循环引用的问题
            function fn(){
                let obj1 = {};
                let obj2 = {};
                obj1.a = obj2;
                obj2.b = obj1;
            }
            //解决方法:手动释放 obj1 = null obj2 = null
        

    内存泄漏

    • 某些情况无法释放内存,变量一直处于环境中
    • 出现内存泄漏的一些情况
      • 最常见的就是闭包了
        • 闭包会创建一个不会被销毁的栈内存。
        • 不经意的全局变量
            function fn(){
                obj = {};//没用声明关键字,相当于创建了一个全局变量
            }
        
        • 计时器没有被清除
            setInterval()
            setTimeout()
            //解决方法
            清除对应定时器的id
    滑稽脸
  • 相关阅读:
    Linux和windows 查看程序、进程的依赖库的方法
    ida pro 使用
    sql server相关
    nginx 日志log_format格式
    .yml文件格式
    svn加锁设置
    包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
    visual studio 2017 (vs2017安装)
    OpenResty编译安装
    微信扫描二维码登录网站技术原理
  • 原文地址:https://www.cnblogs.com/angle-xiu/p/11614316.html
Copyright © 2011-2022 走看看