JavaScript的垃圾回收
2016-07-21 18:01
302 查看
一.垃圾回收(GC)--周期性回收
原理:找出不再使用的变量(生命周期结束),然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行;
生命周期:全局变量--全局销毁结束(退出浏览器);局部变量--当前函数执行完毕结束(闭包例外);
二.哪些方式
1.标记清除(2012年后所有现代标准浏览器都使用标记清除垃圾回收)
2.计数清除(低版本ie的内存泄漏)
三.两个问题
1.性能问题
IE6中的垃圾回收器是根据内存分配量运行的:
256个变量、4096个对象和数组元素、64KB的字符串,达到上述任意一个的临界值,垃圾回收器就会运行。这样就带来一个问题:脚本中本来就包含那么多的变量,那么垃圾回收器就会频繁地运行,严重影响性能。
IE7对其垃圾回收器做了修改:
临界值会动态的调正。
垃圾回收器回收的内存低于15%时,那么临界值就会加倍;如果高于85%时,将各种临界值设为默认的。
2.管理内存
防止运行js消耗过多内存而导致系统崩溃;
(一).解除引用:
优化内存的最佳方式,就是将不在需要用的数据设置null来释放其引用;
适用于大部分的全局变量和全局对象的属性,局部变量会在他们离开执行环境时自动的解除引用;
解除引用 !== 自动回收
目的在于让值脱离执行环境,以便垃圾回收器下次运行时将其回收!
原理:找出不再使用的变量(生命周期结束),然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行;
生命周期:全局变量--全局销毁结束(退出浏览器);局部变量--当前函数执行完毕结束(闭包例外);
二.哪些方式
1.标记清除(2012年后所有现代标准浏览器都使用标记清除垃圾回收)
2.计数清除(低版本ie的内存泄漏)
三.两个问题
1.性能问题
IE6中的垃圾回收器是根据内存分配量运行的:
256个变量、4096个对象和数组元素、64KB的字符串,达到上述任意一个的临界值,垃圾回收器就会运行。这样就带来一个问题:脚本中本来就包含那么多的变量,那么垃圾回收器就会频繁地运行,严重影响性能。
IE7对其垃圾回收器做了修改:
临界值会动态的调正。
垃圾回收器回收的内存低于15%时,那么临界值就会加倍;如果高于85%时,将各种临界值设为默认的。
2.管理内存
防止运行js消耗过多内存而导致系统崩溃;
(一).解除引用:
优化内存的最佳方式,就是将不在需要用的数据设置null来释放其引用;
适用于大部分的全局变量和全局对象的属性,局部变量会在他们离开执行环境时自动的解除引用;
解除引用 !== 自动回收
目的在于让值脱离执行环境,以便垃圾回收器下次运行时将其回收!
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- 深入理解PHP之匿名函数
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法