本文转载自【微信公众号:java进阶架构师,ID:java_jiagoushi】经微信公众号授权转载,如需转载与原文作者联系
本文是何适 JVM 修仙系列第 3 篇,文末有本系列文章汇总。
上一篇介绍 Java 虚拟机结构时讲到 Java 栈同 Java 方法的调用密切相关,那么这篇就来探究下 Java 栈到底和方法的调用有什么关系。Java 栈分如下几部分介绍:
栈帧局部变量表操作数栈帧数据1. 栈帧
线程被创建的时候 Java 栈被创建,Java 栈中保存着栈帧。线程中方法被调用时,对应着一个栈帧被压入 Java 栈;方法返回时,对应的栈帧从 Java 栈中弹出;方法中抛出异常时,对应的栈帧也会将栈帧弹出。
举例说明:方法1中调用方法2,方法2中调用方法3,方法3中调用方法4,当执行到方法4时,栈内存结构如下图:
举例模拟栈溢出:
因为每次方法调用都会生成一个栈帧,当函数调用数量很大,生成的栈帧内存超过 Java 栈总内存时,就会栈溢出 Stack