堆和栈的区别

堆栈

栈用于静态内存分配,堆用于动态内存分配,它们都存储在内存RAM里。

  • 栈上面的变量一般编译时就分配好了(如函数临时变量等)。栈遵循LIFO(后进先出),非常方便管理。
  • 栈的内存分配一般由系统管理,开发者无需关心。
  • 读取栈上的变量速度很快。
  • 当一个方法function被调用时,它会被push进栈中,该方法中的参数和局部变量存储在栈中,当方法执行完后,该方法pop出来,相应的栈空间被释放。

  • 堆上的变量,一般在程序运行期分配。
  • 读取堆上数据速度较慢。
  • 堆上的元素能够在任何时候被读取,开发者也能够在任何时候申请堆内存空间并且释放申请的空间,所以管理堆上的变量比较复杂。
  • 通常我们说的内存管理实际上是指堆内存管理。
  • 堆的大小仅受限于虚拟内存的大小。

说明

多线程开发中,每一个线程都有自己独立的栈,但是它们共享堆。

存粹没事瞎折腾 ヾ(≧▽≦*)o