zoukankan      html  css  js  c++  java
  • 内存管理 内存泄漏

    垃圾回收机制是周期性的,按照特定的周期循环,或者按照预先定义的时间执行
     
    最流行的回收机制是mark-and-sweep
    当一个变量进入当前上下文,那么会被标示为在上下文中,内存不会被释放,当他离开会被标示为不在上下文,当垃圾回收机制运行的时候,它会首先记录内存里的所有变量,然后将那些在上下文中和被在上下文中变量引用的变量去掉,然后剩下的变量会被销毁,它们占用的内存也会被回收
     
    As of 2008, Internet Explorer, Firefox, Opera, Chrome, and Safari all use mark-and-sweep garbage collection (or variations thereof) in their JavaScript implementations, though the timing of garbage collection differs.
     
    另一种回收机制为reference counting,这个方法的原理是每一个对象记着有对自己的引用总数,当垃圾回收运行的时候,会把引用数为0的值销毁释放内存。这个机制有个严重的问题,当对象相互引用时,会出现circular references,因此现在的浏览器都不在使用这种算法。但是在ie8及之前的浏览器里并不是所有的对象都是原生对象,Dom 和BOM 里的对象被称之为COM (Component Object Model) 对象,使用C++实现。而Com里面是用reference counting作为垃圾回收机制的,因此还是会存在问题。例如:
     
    var element = document.getElementById(“some_element”); var myObject = new Object();
    myObject.element = element;
    element.someObject = myObject;
    解决方法
    myObject.element = null; element.someObject = null;
     
    在ie浏览器通过window.CollectGarbage()出发回收,opera通过window.opera.collect()
  • 相关阅读:
    vue axios的使用
    html5 css写出一个实心三角形和空心三角行
    弹出新页面并使整个旧页面背景变暗功能的实现代码
    radio 单选按钮 选中多个
    搭建脚手架cli2.x环境
    页面滚动条位置触发事件
    DataGridView行号发生变化 使用的事件
    eclipse git 忽略文件
    eclipse git 分享项目到GitHub上
    eclipse git 创建新分支 合并分支 删除分支
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5164102.html
Copyright © 2011-2022 走看看