JS中的垃圾回收机制
来源:互联网 发布:架子鼓训练软件安卓版 编辑:程序博客网 时间:2024/06/08 16:12
1.js中的内存管理
js具有自动的垃圾回收机制,也就是执行环境负责管理代码中使用的内存,在编写js时,不用像编写C语言那些需要手动跟踪内存的使用情况,而这种垃圾收集机制的原理很简单,就是定期找出不再使用的变量,然后释放其占用的内存,所以垃圾收集器就定期的执行这一操作。
2.局部变量的生命周期
js的局部变量只有当此函数执行的过程中存在,在执行的时候,会给当前变量在内存上分配相应的空间,用来存储他们的值,知道函数执行结束。此时局部变量就没有存在的意义,就可以释放其内存。
3.JS的几种垃圾收集方式
1.标记清除(这是JS种最常用的垃圾收集方式)
常用的标记状态有两种:
(1)进入环境:当变量进入环境时,就将这个变量标记为“进入环境”
(2)离开环境:当变量离开当前环境时,就标记为“离开环境”。
垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上的标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作。销毁那些带标记的值并回收它们所占用的内存空间。
2.引用计数(有瑕疵)
引用计数的原理是跟踪记录每个值被引用的次数,当声明一个变量并将一个引用类型值赋给该变量的时候,其次数为1,如果同个值又赋给其他变量,则次数加一,相反,如果此变量被赋值其他值,则次数减一,当引用次数为0,就没办法访问这个值,就将其内存空间回收,这样当垃圾回收器下次再运行,就会释放次数为0的值占用的内存。
严重问题:(循环引用)
function problem(){ var obA=new Object(); var obB=new Object(); obA.A=obB; obB.B=obA;}
这两个对象通过各自属性相互引用,所以其次数永远不为0,导致占用大量内存。
4.管理内存
因为系统分配给Web浏览器的内存数量被限制,防止因js耗尽全部内存导致系统崩溃,但是内存的限制影响了一个线程中同时运行语句的数量,所以要确保占用最少内存可以让页面获得更好性能。
而最好的方式,就是只保存必要数据,一旦数据不再用,就将其值赋为null来释放引用——这种做法叫做解除引用,这种做法适用于全局属性,因为局部属性在离开执行环境时自动被解除引用。如下:
function A(name){ var localA=new Object(); localA.name = name; return localA;}var B=A("AA");//解除引用B=null;
解除这个值的引用并不是自动回收其内存,而是让值脱离执行环境,让垃圾回收器下次运行时将其回收。
- js中的垃圾回收机制
- JS中的垃圾回收机制
- js垃圾回收机制
- js 垃圾回收机制
- js垃圾回收机制
- js垃圾回收机制
- js垃圾回收机制
- JS垃圾回收机制
- js垃圾回收机制
- JS中的垃圾回收
- js的垃圾回收机制
- js的垃圾回收机制
- js的垃圾回收机制
- 转载和积累系列 - js中的垃圾回收机制
- java中的垃圾回收机制
- java中的垃圾回收机制
- java中的垃圾回收机制
- Java中的垃圾回收机制
- 图形学学习笔记]OpenGL视图矩阵变换
- LeetCode344——Reverse String(将字符串反转)
- forEach , $.each() , $().each()的使用
- jQuery中ajax的使用
- LINUX进程调度
- JS中的垃圾回收机制
- 【用Python学习Caffe】0. 前言及介绍
- jQuery中的$(this)的使用
- 杭电2571-命运 动态规划
- data-toggle与data-target的作用
- servlet/filter/listener/interceptor区别与联系
- Linux学习
- 图像顺时针步进1个像素点的算法
- java中json的使用