Heap: 堆
Stack: 栈
Heap内存的分配也叫动态内存分配

Stack内存相对于线程而言,执行函数时,内部变量的存储放在栈上边创建。Stack主要保存线程中方法中短期存在的变量值和对Heap中对象的引用。

区别:

  1. 堆不需要连续内存,空间较大; 栈是连续内存的区域,大小有操作系统决定。
  2. 堆管理麻烦,频繁的new或者remove造成内存碎片,导致效率低下; 栈,先进后出,进出不会产生碎片,效率高且稳定。
  3. java的GC是针对heap内存的,因为stack内存在函数出栈时就被销毁了。
  4. 方法中变量:存在stack栈中; 类成员变量存在Heap堆中