js引擎内存管理
js对基本数据类型的内存分配在栈空间
js对复杂数据类型的内存分配在堆空间,并返回给栈一个堆内存的地址
var name = "Jo"
var obj = {name:"obj",
age:20}
var name = “Jo” 会在栈中分配内存
var obj = {name:“obj”, age:20} 会在堆中开辟一块空间给该对象,在栈中会引用它的地址
js引擎的垃圾回收
常见的GC算法
- 每一个对象被n个不同对象引用那么他的引用值就是n,当n为0时该对象所占的内存被回收。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emKd6KJi-1668437205791)
- 循环引用
var obj = {age:18,newObj:obj1}
var obj1 = {age:20,newObj:obj}
这种情况存在内存泄漏
设置一个根对象,从根对象开始寻找被引用的对象,没有被引用的对象的内存被回收。
下图中只有20对象没有被引用所以20对象被回收