简介
在本篇文章呢,我来介绍一下JavaScript中的垃圾回收的垃圾回收
JavaScript中的垃圾
来看一下在JavaScript中什么样的内容会被当做是垃圾,在我们后续的GC算法当中,
也会存在了一个垃圾的概念,两者的其实是完全一样的,所以在这里说明首先对于我们前端开发来说的。
JavaScript中内存管理是自动的,每当创建一个数组、对象或者函数的时候呢,
它就会自动的去分配相应的内存空间。后续程序代码在执行的过程。
无法通过引用关系再找到某些对象的时候那么这些对象就会被看做垃圾,再或者是这些对象是已经存在的
但是由于我们代码当中一些不合适的语法或者结构性的错误 让我们没有办法再找到一个对象
那么这种对象也会被当做垃圾对象
1、JavaScript中内存管理是自动的
2、对象不再被引用时是垃圾
3、对象不能从根上访问到时是垃圾
知道了什么是垃圾之后呢,然后JavaScript引擎进行工作把它们所占据的对象间的进行回收,
那这个过程呢就叫JavaScript垃圾回收
JavaScript中的可达对象
1、可以访问到的对象就是可达对象(引用、作用域链)就是可达对象
2、在这里有个限制,可到的标准就是从根上出发是否能够被找到
3、JavaScript中的根就是可以理解为全局变量对象,也就是全局执行上下文
JavaScript中的垃圾回收,其实就是找到垃圾,让JavaScript引擎来进行空间的释放和回收
JavaScript中的引用
let obj = { name: "handsome" }
//obj指向一个对象 ,{ name: "handsome" }被obj引用了
let ali = obj
//{ name: "handsome" }多了一层引用
obj = null //释放内存
相互引用
function objGroup(obj1, obj2) {
obj1.next = obj2;
obj2.prev = obj1;
return {
o1: obj1,
o2: obj2
}
}
let obj2 = objGroup({ name: "obj1" }, { name: "obj2" })
console.log(obj2);
// {
// o1: <ref * 1 > {
// name: 'obj1',
// next: { name: 'obj2', prev: [Circular * 1] }
// },
// o2: <ref * 2 > {
// name: 'obj2',
// prev: <ref * 1 > { name: 'obj1', next: [Circular * 2] }
// }
// }
谢谢观看!!!
更多推荐
JavaScript性能优化-垃圾回收
发布评论