zoukankan      html  css  js  c++  java
  • JavaScript之内存泄漏和内存溢出

    内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。

    var obj = {}
    for(let i = 0;i < 1000000;i++){
        obj[i] = new Array(1000000)
    }
    

    个人理解:内存溢出是最终结果,即使没有编写内存泄露的代码也有可能造成内存溢出

    内存泄漏:占用的内存没有及时释放,内存泄漏积累多了就容易导致内存溢出。

    常见的内存泄漏

    • 意外的全局变量
    function fn(){
        a = 10
        console.log(a)    
    }
    fn()
    
    for(let i = 0;i < 10;i++){
      window[i] = i
    }
    • 没有及时清理的定时器
    var timer = setInterval(() => {
      console.log('----')
    }, 1000)
    
    //及时清理定时器
    clearInterval(timer)
    • 闭包
    function fn1() {
      var arr = new Array[100000];
      function fn2() {
        console.log(arr.length)
      }
      return fn2;
    }
    var f = fn1();
    f();
    
    f = null // 让内部函数成为垃圾对象,释放闭包
    • 事件绑定
    function fn() {
        var zjy = document.getElementById('zjy'); 
        zjy.onclick = function () {
            alert(zjy.innerHTML);
        };
    
        zjy = null;       //解除引用,等待垃圾回收
        alert(zjy);       //null,说明已经不存在了
    }
    fn();  
    
    • 事件监听
    function fn(){
        console.log('zjy')
    }
    let zjy = document.getElementById('zjy'); 
    zjy.addEventListener('click',fn)
    zjy.removeEventListener(fn)
    

      

  • 相关阅读:
    Errors
    fix eclipse gc overhead limit exceeded in mac
    Cobub Razor
    Mac commands
    git vs svn
    SourceTree
    生成静态页技术
    URL重写技术总结
    回味手写三层-增删改查
    生成 (web): 找不到目标 .NET Framework 版本的引用程序集;请确保已安装这些程序集或选择有效的目标版本。
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/13257420.html
Copyright © 2011-2022 走看看