栈内存(stack)
存放:函数的参数值、局部变量(基本数据类型数据和引用数据类型的首地址)
特点:
- 栈内存特点:先进后出、后进先出
- 栈内存是一块连续的内存中间,由系统分配,速度快!
- 每个线程都有自己对应的栈内存,不同线程的数据不会相干扰!
- 栈内存有系统自己管理,无需程序员手动管理内存。
缓存方式:
存放在一级缓存中, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆内存(heap)
存放:new出来的对象和数组
特点:
- 堆内存不连续的内存空间,分配灵活,速度慢。
- 一个进程中共享同一份堆内存,每个线程公用一个堆内存!
- 堆内存本质上需要程序员来手动管理内存(分配释放),但是java有垃圾回收机制来帮程序管理内存。
缓存方式:
存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。