系统相关
首页 > 系统相关> > JS内存管理

JS内存管理

作者:互联网

内容概要:

在程序运行中,性能优化是必不可少的。从认识内存空间的使用,到垃圾回收的机制,一步步地写出更高效的代码

内存管理介绍:

JS中的内存管理

JS中的内存管理是自动进行的,没有相关API去进行实现,以下内容就可以看做是JS中的内存管理流程

//把使用不到的变量手动置为空
obj = null

JS中的垃圾回收

JS中的垃圾定义:
JS中的可达对象

JS中的垃圾回收就是找到垃圾, 让内存引擎去回收这些空间

function objGroup (obj1, obj2) {
    obj1.next = obj2
    obj2.prev = obj1

    return {
        o1: obj1,
        o2: obj2
    }
}

let obj = objGroup({name:' obj1'}, {name: 'obj2'})
console.log(obj)
//此时obj, obj1, obj2都是可达对象,在全局对象上都是可以找到的

在这里插入图片描述

function objGroup (obj1, obj2) {
    obj1.next = obj2
    obj2.prev = obj1

    return {
        o1: obj1,
        o2: obj2
    }
}

let obj = objGroup({name:' obj1'}, {name: 'obj2'})
console.log(obj)
//把关于obj1的引用都删除掉,obj1就会被认为是垃圾,从而被JS引擎回收
delete obj.o1
delete obj.o2.prev

在这里插入图片描述

GC算法介绍:

GC中的垃圾是什么
GC算法是什么
常见GC算法

引用计数算法:

实现原理:

​ 为当前对象设置引用数,判断当前对象引用数是否为0,如果为0,就将该对象进行回收,以释放空间和再分配

引用计数器:

引用关系改变立即修改引用数字,为0时清除该对象

//user1 user2 user3都被list变量引用
const user1 = { num: 12}
const user2 = { num: 23}
const user3 = { num: 24}

const list = [user1.num, user2.num, user3.num]

function fn(){
    //fn执行完毕,内部声明的变量num1 num2都会被清除
    const num1 = 1
    const num2 = 2
}

fn()
优点:
缺点:
let obj1 = {name: 'luffy'}
let obj2 = {name: 'zoe'}
obj1.ref = obj2
obj2.ref = obj1
//此时obj1和obj2互相引用,且没有别的地方再去引用他们,因为他们的引用数都不是0, 就都不会被回收掉

标记清除算法

优点:
缺点:

在这里插入图片描述

在这里插入图片描述

标记整理算法

标记整理算法可以看做是标记清除算法的增强版

流程:

在这里插入图片描述

在这里插入图片描述

标签:obj1,obj2,obj,管理,对象,回收,JS,内存,引用
来源: https://blog.csdn.net/YL971129/article/details/122290244