JavaScript中变量的存放
- 1、基本类型:基本数据类型会保存在栈中,基本类型的值在内存中都占用固定大小的空间,可以按值访问。基本类型有:Undefined,Null,Number,String,Boolean和Symbol。闭包中的变量不会保存在栈内存中,而是保存在堆内存中。
- 2、引用类型:引用类型在内存中占用的空间大小是不确定的,但是引用类型的值在内存中的地址是确定的,所以引用类型的访问地主会保存在栈里面,引用类型的具体的值会保存在堆里面。当访问引用类型的值时,先从栈中获取这个值的地址,再通过地址找到堆中的值,这样的方式叫做按引用访问。
JavaScript中内存生命周期
- 分配内存
- 使用内存
- 释放内存
JavaScript的内存回收
JavaScript有垃圾自动回收机制,垃圾收集器每隔一段时间就会运行一次,会自动的将不再使用的变量占用的内存释放。
1、局部变量和全局变量的销毁
- 局部变量:在局部作用域中,当函数执行完成之后,局部变量就没有存在的必要了,垃圾回收器会在运行的时候销毁局部变量并释放内存。
- 全局变量:全局变量是在最后进行销毁的,会长时间占用内存,所以应该尽量减少全局变量的使用。
常用的垃圾回收方法
- 标记清除法(现代浏览器已经不再使用):缺点是当出现循环引用的时候,会导致内存不能释放,出现内存泄漏的问题。
- 引用计数法(比较常用)
内存泄漏
如果没有及时释放不再被使用的内存,就会导致内存占用越来越高,导致进程崩溃,这样的现象就是内存泄漏。