1.什么是内存回收
提到内存回收,一般指的是在应用中数据所占用内存不再使用时进行清除,保证内存能被释放已供其它新建数据使用。在JS也如此,在栈和堆中不再使用的数据应该被及时回收,否则会造成内存溢出等问题。
2.内存溢出常见问题
在日常开发中,当使用了一些定时器或绑定事件处理函数时,在使用完毕后未及时手动清除,则会导致创建的数据一直在栈和堆中被占用,ESP指针在栈的上下文中执行时对占用的数据不能进行自动回收,时间长了会导致应用缓慢或者崩溃的问题。
3.垃圾回收机制是什么样的
在JS中采用的是自动垃圾回收机制,整体而言,JS垃圾回收划分了新生代和老生代,新生代存放一些数据量小并且回收频繁的变量,在新生代又划分成了活动区和空闲区,垃圾回收器会定时把活跃的数据复制到空闲区,并在一定时机交换两个区域的功能用途,把在复制到空闲区的数据改成活动区,之前的活动区不使用的数据会被清除,并被标记成新的空闲区以此反复下去。
那么,老生代是什么样的?
老生代使用的是比较大的数据,因为不像新生代需要经常进行交换。并且新生代活跃的数据会被移动到老生代中。老生代采用的垃圾回收以标记清除为主,但数据不再保持着引用会被垃圾程序标记,并在下一阶段进行清除,而且垃圾回收程序会进行标记整理,把内存中因数据清除造成的空间内存不连续问题进行优化,把对应数据整理成完整连续的内存空间。
4. 结语
虽然垃圾回收机制会自动进行数据回收,但在开发中要尽量避免不再使用的数据一直占用着内存,像在闭包场景的使用当中,当外部变量不再使用时要及时进行释放外部变量的值等,避免因为一些疏忽导致内存的溢出。在日常开发中,虽然引擎为我们自动管理内存,但作为开发者,我们依然是内存使用的第一责任人,而了解垃圾回收机制对于编写高性能的代码也有着举足轻重的作用。
2328

被折叠的 条评论
为什么被折叠?



