zoukankan      html  css  js  c++  java
  • 垃圾回收与内存管理

    垃圾回收机制

    Javascript采用 自动垃圾收集机制,执行环境会负责跟踪代码执行过程中使用的内存,而在C和C++类的语言中,需要开发人员手工跟踪内存的使用情况。

    该机制的实现原理:找出那些不再继续使用的变量,然后释放其占用的内存,为此,垃圾收集器会按照固定的时间间隔周期性的执行这一操作。

    javascript的垃圾回收机制会将变量分为两大类:函数内的局部变量 和 非局部变量。因为,局部变量只在函数执行的过程中存在,在函数执行的过程中,为局部变量在栈或堆内存上分配相应的空间,函数执行完毕,释放局部变量占用的内存空间,变量被销毁;而对于非局部变量,垃圾收集器就需要跟踪变量,判断哪些没用了,打上标记,这种标记策略因浏览器而异,通常有两种。

    1. 标记清除

    垃圾收集器在运行的时候给存储在内存中的所有变量都加上标记,然后,它会去掉执行环境中的变量和已经被环境引用的变量的标记。在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清理工作。销毁那些带标记的值并回收他们所占用的内存空间。

    到2008年为止,IE、Fireforx、Opera、Chrome和Safari采用的都是这种垃圾收集策略,只是收集的时间间隔不同。

    2. 引用计数

    引用计数的含义是跟踪记录每个值被引用的次数,当值的引用次数为0时,将其占用的内存空间回收,当垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占用的内存。

    但该方法存在一个很大的漏洞,当遇到循环引用(对象A中包含一个指向对象B的指针,而对象B中也包含一个指向对象A的指针)时,会出现大量的内存得不到回收。

    目前,大部分浏览器都不采用这种方式,除了IE。IE中有一部分对象并不是原生的javascript对象,例如DOM和BOM中的对象是使用C++以COM(Component Object Model,组件对象模型)对象的形式实现的。

    管理内存

    Javascript为了安全性以及防止运行javascript的网页耗尽全部系统内存而导致系统崩溃,分配给Web浏览器的可用内存数量通常比分配给桌面应用程序的少,但是这种内存限制问题不仅会影响给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

    因此,确保占用最少的内存可以让页面获得更好的性能。优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据,一旦数据不再使用,通过将其值设置为null释放其引用,这种做法叫做解除引用,这一做法适合大多数全局变量和全局变量的属性,局部变量会在他们离开执行环境时自动被解除引用。

  • 相关阅读:
    python flask api
    理解傅里叶变换
    数学建模笔记
    (java)Ansj分词器,Stanford分词器,Jieba分词器,NLPIR汉语分词系统
    《数学之美》读书笔记
    浅谈对机器学习方法(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)的理解以及用sklearn工具实现文本分类和回归方法
    《大话数据挖掘》学习笔记——案例教学法
    py调用另一个py
    ros树梅派4bmpu6050
    cleaningrobot_planing
  • 原文地址:https://www.cnblogs.com/onlycare/p/9791873.html
Copyright © 2011-2022 走看看