js中内存的分配和回收都是自动完成的,内存不使用的时候会被垃圾回收器自动回收。
- 内存分配:当我们声明变量、函数、对象的时候,系统会自动为它们分配内存。
- 内存回收:使用完毕,由垃圾回收器自动回收不再使用的内存。
- 全局变量一般不会回收(关闭页面回收)
- 一般情况下,局部变量的值,不再使用了,会被自动回收。
两种常见的浏览器垃圾回收算法:
- 引用计数法:跟踪被引用的次数,如果引用次数变为0,则释放内存。这种算法存在一个致命的问题:循环引用,即两个对象互相引用,尽管它们已不再使用,但垃圾回收器不会进行回收。
- 标记清除法:现代浏览器大多数是基于标记清除法的某些改进算法。从根部(在js中就是全局对象)出发定时扫描内存中的对象,那些由根部出发无法到达的对象被标记为不再使用,稍后进行回收;凡是能从根部到达的对象,都是还需要使用的。