【JS基础整理—No.01】 内存管理(垃圾回收、内存泄漏、弱引用)

本文介绍了JavaScript中的内存管理,包括内存分配、垃圾回收机制(引用计数法、标记清除法)以及如何尽量减少垃圾回收。此外,还详细讨论了内存泄漏的常见原因,如循环引用、闭包、全局变量和定时器,并引入了弱引用的概念,如WeakMap和WeakSet在防止内存泄漏中的作用。
摘要由CSDN通过智能技术生成

 内存管理是指在声明一个变量时,我们为它分配一块内存空间,当不在需要时,将这块内存释放。在JS中开发者不需要手动进行内存管理,JS引擎会自动进行内存管理。

一、内存分配

当我声明变量时,我们要根据变量的数据类型进行内存分配。数据类型分为基本数据类型和引用数据类型。👇下面是一个简单的区别图解

基本类型:系统会为分配一块内存(栈),这块内存中保存的就是变量的内容。【String,Number,Boolean,Null,Undefined,Symbol】

引用类型:其存储的只是一个地址而已(栈),这个地址指向的内存块(堆)才是是变量的真正内容。【Object,Array,Function】

🪐:这里只简述一下数据类型在内存中的保存方式,其他关于数据类型的相关内容就不细说了。

二、内存释放(垃圾回收机制)

内存释放,即垃圾回收机制。当变量不再需要时,JS引擎把变量占用的内存回收。我们就需要知道如何判断变量不再需要。JavaScript 中有全局对象,浏览器中的全局对象是window,垃圾回收机制时从全局对象开始。

有一个官方解释叫可达性,我可太讨厌用概念来解释概念了。直接上图👇根据内存图,我们可以把可达性理解成“无法到达的岛屿🏝”

内存状态图解

情况一:

let user = {name: 'John'};  // 一个对象 {name:”John”}(称之为对象A)被创建,全局变量 “user” 引用了对象A
user = null;                // 如果user被覆盖,这个引用就没了
// 现在 对象A 变成不可达的了。因为没有引用了,就不能访问到它了。垃圾回收器会认为它是垃圾数据,然后释放内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值