栈和堆的区别

内存分配策略

  • 静态存储:编译时确定每个数据目标在运行时的存储空间要求。因而,可以在编译时就分配内存空间,这种分配策略,要求代码中不允许有可变数据结构的存在,也不允许有嵌套或递归的出现。因为他们都会导致程序在编译时无法计算准确的存储空间
  • 栈式存储:数据区需求在编译时未知,运行时模块入口前确定。在运行中,必须确定该程序模块需要的数据区的大小才能分配其内存。和所熟知的栈一样,按照先进后出的原则分配
  • 堆式存储:编译时或运行时模块入口都无法确定,动态分配。比如:可变长度串,对象实例。堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放

堆和栈的联系
引用对象、数组是,栈里定义变量保存堆中目标的首地址
栈和堆的区别
堆和栈的区别

  • 管理方式:栈自动释放,堆需要GC
  • 空间大小:栈比堆小
  • 碎片相关:栈产生的碎片远小于堆
  • 分配方式:栈支持静态分配和动态分配,而堆仅支持动态分配
  • 效率:栈的效率比堆高