zoukankan      html  css  js  c++  java
  • L--js内存泄露

    简介

      内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的 C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器 垃圾回收方法有bug,会产生内存泄露,以下情况都是基于IE浏览器。

    1.给 DOM 对象添加的属性是一个对象的引用

    var MyObject = {};  
    
    document.getElementById('myDiv').myProp = MyObject;
    解决方法:在window.onunload 事件中写上: document.getElementById('myDiv').myProp= null;
     

    2.DOM 对象与 JS 对象相互引用

    function Encapsulator(element) {  
    
    this.elementReference = element;  
    
    element.myProp = this;  
    
    }  
    
    new Encapsulator(document.getElementById('myDiv'));
    解决方法:在window.onunload 事件中写上: document.getElementById('myDiv').myProp= null;
     

    3 .给 DOM 对象用 attachEvent 绑定事件

    function doClick() {}  
    
    element.attachEvent("onclick", doClick); 

    解决方法:element.detachEvent('onclick', doClick);

    4 .从外到内执行 appendChild 。这时即使调用 removeChild 也无法释放

    var parentDiv = document.createElement("div");  
    
    var childDiv = document.createElement("div");  
    
    document.body.appendChild(parentDiv);  
    
    parentDiv.appendChild(childDiv); 

     解决方法:从内到外执行appendChild

    5 .反复重写同一个属性会造成内存大量占用 ( 但关闭 IE 后内存会被释放 )

    for(i = 0; i < 5000; i++) {  
    
    hostElement.text = "asdfasdfasdf";  
    
    }
    //
    这种方式相当于定义了5000个属性!

     解决方法:就是编程的时候尽量避免出现这种情况

  • 相关阅读:
    HDU 1025 Constructing Roads In JGShining's Kingdom (DP+二分)
    HDU 1158 Employment Planning
    HDU 2059 龟兔赛跑
    Csharp 简单操作Word模板文件
    Csharp windowform datagridview Clipboard TO EXCEL OR FROM EXCEL DATA 保存datagridview所有數據
    Csharp 讀寫文件內容搜索自動彈出 AutoCompleteMode
    Csharp windowform controls clear
    CSS DIV大图片右上角叠加小图片
    Csharp DataGridView自定义添加DateTimePicker控件日期列
    Csharp 打印Word文件默認打印機或選擇打印機設置代碼
  • 原文地址:https://www.cnblogs.com/guDouMaoNing/p/4389783.html
Copyright © 2011-2022 走看看