Java 虚拟机栈是用来支持 Java 方法执行的内存区域。每个线程在执行 Java 方法时,都会创建一个对应的栈帧,栈帧用于存储局部变量表、操作栈、动态链接和返回地址等信息。这些栈帧按照方法调用的先后顺序依次排列,形成虚拟机栈。
重要特点和异常情况包括:
- 栈帧: 每个方法的执行都对应一个栈帧,栈帧包含了方法的局部变量表、操作栈、动态链接和返回地址等信息。
- 方法调用: 在执行方法调用时,会创建一个新的栈帧并压入虚拟机栈,方法返回时栈帧会出栈。
- StackOverflowError: 如果线程请求的栈深度大于虚拟机允许的深度,会抛出
StackOverflowError异常。 - OutOfMemoryError: 如果虚拟机栈容量可以动态扩展,而栈占用的内存超出了可用内存,会抛出
OutOfMemoryError异常。
虚拟机栈的生命周期与线程相同,线程开始时分配虚拟机栈空间,线程结束时虚拟机栈空间被回收。虚拟机栈中的栈帧随着方法的调用和返回而动态地进栈和出栈。