Java中的堆和栈
- 栈内存
- 存放基本数据类型和引用变量
- 堆内存
- 存放运行时创建的对象
- 一般来说,通过new关键字创建出来的对象都放在堆内存中
由于JVM是基于堆栈的虚拟机,而每个Java程序都运行在一个独立的JVM实例上,每一个实例对应一个堆。
一个Java程序内的多个线程也就运行在同一个JVM实例上,因此这些线程之间会共享堆内存,因此,多线程在访问堆中的数据时需要对数据进行同步。
- 通过对比堆和栈,堆内存主要用来存放对象,栈内存主要用来执行程序
- 相较于堆,栈的存取速度更快,但是栈的大小和生存周期必须是确定的,因此缺乏一定的灵活性
- 而堆内存可以运行在运行时动态地分配,生存期不用提前告诉编译器,但这也导致了存取速度的缓慢