❒ Java Virtual machine Stacks (java 虚拟机栈)
✔ 栈是一种快速有效的分配储存方式,访问速度仅次于PC程序计数器
✔ 对于栈来说不存在垃圾回收问题(弹栈即释放栈内存)
✔ 栈中主要存放一些基本类型的变量(byte, short, int, long, float, double, boolean, char)和对象的引用变量。
✔ 每个线程运行时所需要的内存,称为虚拟机栈,先进后出。
✔ 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存。
✔ 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。
✔ 栈有一个很重要的特殊性,就是存在栈中的数据可以共享(栈中的数据可以被多个变量引用 int a = 3, b = 3;)。
❒ 堆栈的区别是什么?
✔ 栈内存一般会用来存储局部变量和方法调用,但堆内存是用来存储Java对象和数组的的。堆会GC垃圾回收,而栈不会。
✔ 栈内存是线程私有的,而堆内存是线程共有的。
✔ 两者异常错误不同,但如果栈内存或者堆内存不足都会抛出异常。
✔ 栈空间不足:java.lang.StackOverFlowError。
✔ 堆空间不足:java.lang.OutOfMemoryError。