堆与栈

栈内存(stack)

栈内存

存放函数的参数值、局部变量(基本数据类型数据和引用数据类型的首地址)
特点

  • 栈内存特点:先进后出、后进先出
  • 栈内存是一块连续的内存中间,由系统分配,速度快!
  • 每个线程都有自己对应的栈内存,不同线程的数据不会相干扰!
  • 栈内存有系统自己管理,无需程序员手动管理内存。

缓存方式
  存放在一级缓存中, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆内存(heap)

存放new出来的对象和数组
特点

  • 堆内存不连续的内存空间,分配灵活,速度慢。
  • 一个进程中共享同一份堆内存,每个线程公用一个堆内存!
  • 堆内存本质上需要程序员来手动管理内存(分配释放),但是java有垃圾回收机制来帮程序管理内存。

缓存方式
  存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

原文地址:https://www.cnblogs.com/lyang-a/p/stack_heap.html