js中的栈(stack)和堆(heap)
什么是堆什么是栈?
程序运行时候,需要内存空间存放数据。系统划分出的两种内存空间就叫做stack(栈)和heap(堆)。
栈(stack):由操作系统自动分配内存空间,自动释放,存储的是基础变量以及一些对象的引用变量,占据固定大小的空间。
堆(heap):由操作系统动态分配的内存,大小不定也不会自动释放,一般由程序员分配释放,也可由垃圾回收机制回收(程序结束时由浏览器回收)。
堆和栈的优缺点
栈(stack):内存可以及时得到回收,数据大小与生存期必须是确定的,缺乏灵活性。
堆(heap):保存的对象不会自动释放,生存周期比较灵活。
栈(stack) | 堆(heap) |
---|---|
存储基础数据类型 | 存储引用数据类型 |
按值访问 | 按引用访问 |
存储的值大小固定 | 存储的值大小不固定,可动态调整 |
由系统自动分配内存空间 | 由代码进行指定分配 |
空间小,运行效率高 | 空间大,运行效率相对较低 |
先进后出 | 无序存储,可根据引用直接获取 |