JavaScript内存回收机制

1.什么是内存回收

提到内存回收,一般指的是在应用中数据所占用内存不再使用时进行清除,保证内存能被释放已供其它新建数据使用。在JS也如此,在栈和堆中不再使用的数据应该被及时回收,否则会造成内存溢出等问题。

2.内存溢出常见问题

在日常开发中,当使用了一些定时器或绑定事件处理函数时,在使用完毕后未及时手动清除,则会导致创建的数据一直在栈和堆中被占用,ESP指针在栈的上下文中执行时对占用的数据不能进行自动回收,时间长了会导致应用缓慢或者崩溃的问题。

3.垃圾回收机制是什么样的

在JS中采用的是自动垃圾回收机制,整体而言,JS垃圾回收划分了新生代和老生代,新生代存放一些数据量小并且回收频繁的变量,在新生代又划分成了活动区和空闲区,垃圾回收器会定时把活跃的数据复制到空闲区,并在一定时机交换两个区域的功能用途,把在复制到空闲区的数据改成活动区,之前的活动区不使用的数据会被清除,并被标记成新的空闲区以此反复下去。
那么,老生代是什么样的?
老生代使用的是比较大的数据,因为不像新生代需要经常进行交换。并且新生代活跃的数据会被移动到老生代中。老生代采用的垃圾回收以标记清除为主,但数据不再保持着引用会被垃圾程序标记,并在下一阶段进行清除,而且垃圾回收程序会进行标记整理,把内存中因数据清除造成的空间内存不连续问题进行优化,把对应数据整理成完整连续的内存空间。

4. 结语

虽然垃圾回收机制会自动进行数据回收,但在开发中要尽量避免不再使用的数据一直占用着内存,像在闭包场景的使用当中,当外部变量不再使用时要及时进行释放外部变量的值等,避免因为一些疏忽导致内存的溢出。在日常开发中,虽然引擎为我们自动管理内存,但作为开发者,我们依然是内存使用的第一责任人,而了解垃圾回收机制对于编写高性能的代码也有着举足轻重的作用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值