javascript内存管理

生命周期

无论什么编程语言,内存生命周期都是一致的————分配,使用,释放

内存管理

1.某些类似C语言的程序,一般都有内存管理接口,开发人员需要显式分配和释放操作系统的内存
2.javascript会自动进行内存分配,并在不被使用时进行自动释放,这个过程被称为“垃圾回收”

垃圾回收

1.有两种回收策略————引用计数和标记清除
2.现代绝大多数游览器已经都采用后者
3.垃圾回收算法依赖的主要概念是引用

引用计数

跟踪记录每个引用,存在引用的+1,不存在引用的-1,在代码操作过程中,最终引用为0的会被垃圾收集
器在下次运行时清除

标记清除

检查对象是否可以获得————通过生成一个根列表,将引用保存在运行时的全局变量中(window),使得所
有根和子对象都被标记为活跃的,而从根元素不可达的部分则被认为是垃圾,可以被回收

内存泄漏

1.由于某些原因,使得一些内存没有归还给操作系统或者进入可用内存池,出现内存被占用的情形
2.由于引用计数策略对于循环引用的对象不会进行回收,导致IE9以下采用引用计数策略的BOM和DOM对象
出现互相引用时,会出现内存泄漏问题,只能手动处理和置空
3.常见的内存泄漏————未带var声明的全局变量,被遗忘的定时器/回调,脱离dom的变量引用,闭包
posted @ 2018-10-23 08:48  戡玉  阅读(144)  评论(0编辑  收藏  举报