栈(stack)

  • 存放基本数据类型
  • 自动分配、释放内存空间
  • 每个数据段占的内存大小一致
  • 读写速度快

所有方法内定义的变量都是保存在栈内存中,方法执行完毕后,对应的内存栈也销毁。

栈溢出:一般出现在递归调用方法的时候,调用轨迹太长导致栈内存不够用

堆(heap)

  • 存放复杂、引用数据类型的值
  • 动态分配内存,不会自动释放,等垃圾回收机制自动释放
  • 大小不固定

数据可以被多个变量引用,可以反复利用

简单数据类型:

Number、String、Boolean、Null、undefined

复杂数据类型:

Array、Function、Object