全景网站开发,摄影设计素材,百度指数使用指南,编程开发工具大全版权声明 本文章来源于B站上的某马课程#xff0c;由本人整理#xff0c;仅供学习交流使用。如涉及侵权问题#xff0c;请立即与本人联系#xff0c;本人将积极配合删除相关内容。感谢理解和支持#xff0c;本人致力于维护原创作品的权益#xff0c;共同营造一个尊重知识… 版权声明 本文章来源于B站上的某马课程由本人整理仅供学习交流使用。如涉及侵权问题请立即与本人联系本人将积极配合删除相关内容。感谢理解和支持本人致力于维护原创作品的权益共同营造一个尊重知识产权的良好环境。 内存的生命周期
JS环境中分配的内存一般有如下生命周期
内存分配当我们声明变量、函数、对象的时候系统会自动为他们分配内存内存使用即读写内存也就是使用变量、函数等 内存回收使用完毕由垃圾回收器自动回收不再使用的内存
JS垃圾回收机制—算法说明
堆栈空间分配区别
1栈操作系统由操作系统自动分配释放函数的参数值、局部变量等基本数据类型放到栈里面。
2堆操作系统一般由程序员分配释放若程序员不释放由垃圾回收机制回收。复杂数据类型放到堆里面。 引用计数
IE采用的引用计数算法定义“内存不再使用”就是看一个对象是否有指向它的引用没有引用了就回收对象算法
const arr [1,2,3,4]
arr null
let person {age: 20,name: 松果
}
let p person
person 1
p null
引用计数存在一个致命问题循环引用
如果两个对象互相引用尽管他们已不再使用垃圾回收器不会进行回收导致内存泄漏。
function fn() {let o1 {}let o2 {}o1.a o2o2.a o1return 引用计数无法回收
}
fn()
标记清除法
现代的浏览器已经不再使用引用计数算法了。
现代浏览器通用的大多是基于标记清除算法的某些改进算法总体思想都是一致的。核心
1标记清除算法将“不再使用的对象”定义为“无法达到的对象”。
2就是从根部在JS中就是全局对象出发定时扫描内存中的对象。凡是能从根部到达的对象都是还需要使用的。3那些无法由根部出发触及到的对象被标记为不再使用稍后进行回收。 function fn() {let o1 {}let o2 {}o1.a o2o2.a o1return 引用计数无法回收
}
fn() 根部已经访问不到所以自动清除