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()
  • 相关阅读:
    memcached启动参数
    Shell 获取当前执行脚本的路径
    linux 下 openssl 编译和交叉编译
    网站更换域名
    linux访问windows共享文件夹
    linux下安装NPM管理工具
    快速构建C++项目工具Scons,结合Editplus搭建开发环境
    C++ Config 配置文件类
    iOS代码Button Demo
    (转)iOS面试题目
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5164102.html
Copyright © 2011-2022 走看看