Java 虚拟机栈

75 阅读1分钟

Java 虚拟机栈是用来支持 Java 方法执行的内存区域。每个线程在执行 Java 方法时,都会创建一个对应的栈帧,栈帧用于存储局部变量表、操作栈、动态链接和返回地址等信息。这些栈帧按照方法调用的先后顺序依次排列,形成虚拟机栈。

重要特点和异常情况包括:

  1. 栈帧: 每个方法的执行都对应一个栈帧,栈帧包含了方法的局部变量表、操作栈、动态链接和返回地址等信息。
  2. 方法调用: 在执行方法调用时,会创建一个新的栈帧并压入虚拟机栈,方法返回时栈帧会出栈。
  3. StackOverflowError: 如果线程请求的栈深度大于虚拟机允许的深度,会抛出 StackOverflowError 异常。
  4. OutOfMemoryError: 如果虚拟机栈容量可以动态扩展,而栈占用的内存超出了可用内存,会抛出 OutOfMemoryError 异常。

虚拟机栈的生命周期与线程相同,线程开始时分配虚拟机栈空间,线程结束时虚拟机栈空间被回收。虚拟机栈中的栈帧随着方法的调用和返回而动态地进栈和出栈。