👌方法的形参在哪块区域?
题目详细答案
在Java虚拟机(JVM)中,方法的形参(即方法的参数)在方法调用时存储在栈帧(Stack Frame)中。栈帧是 JVM 栈(Java Stack)中的一个数据结构,每当一个方法被调用时,JVM 会为该方法创建一个新的栈帧。
一个栈帧主要包含以下几个部分:
- 局部变量表(Local Variable Array):用于存储方法的局部变量和形参。
- 操作数栈(Operand Stack):用于执行字节码指令时的操作数。
- 帧数据(Frame Data):包括方法的返回地址、动态链接、方法的调用者等。
方法的形参在方法调用时会被传递到局部变量表中。局部变量表是栈帧的一部分,用于存储方法的局部变量和形参。每个局部变量在局部变量表中的位置是通过索引来访问的,这些索引是从0开始的。
详细示例
假设有以下Java方法:
1 | public int add(int a, int b) { |
在调用add(5, 10)
时,JVM 会执行以下步骤:
- 创建栈帧:为
add
方法创建一个新的栈帧。 - 初始化局部变量表:
a
被存储在局部变量表的索引0处。
b
被存储在局部变量表的索引1处。
- 执行方法体:
int sum = a + b;
会在操作数栈上执行,然后将结果存储在局部变量表的索引2处。
- 返回结果:将
sum
的值从局部变量表中取出,并作为方法的返回值。
栈帧结构示意图
1 | +--------------------+ |
在这个过程中,a
和b
作为方法的形参被存储在局部变量表中。因此,方法的形参在JVM中存储于栈帧的局部变量表中。