👌方法的形参在哪块区域?

👌方法的形参在哪块区域?

题目详细答案

在Java虚拟机(JVM)中,方法的形参(即方法的参数)在方法调用时存储在栈帧(Stack Frame)中。栈帧是 JVM 栈(Java Stack)中的一个数据结构,每当一个方法被调用时,JVM 会为该方法创建一个新的栈帧。

一个栈帧主要包含以下几个部分:

  1. 局部变量表(Local Variable Array):用于存储方法的局部变量和形参。
  2. 操作数栈(Operand Stack):用于执行字节码指令时的操作数。
  3. 帧数据(Frame Data):包括方法的返回地址、动态链接、方法的调用者等。

方法的形参在方法调用时会被传递到局部变量表中。局部变量表是栈帧的一部分,用于存储方法的局部变量和形参。每个局部变量在局部变量表中的位置是通过索引来访问的,这些索引是从0开始的。

详细示例

假设有以下Java方法:

1
2
3
4
public int add(int a, int b) {
int sum = a + b;
return sum;
}

在调用add(5, 10)时,JVM 会执行以下步骤:

  1. 创建栈帧:为add方法创建一个新的栈帧。
  2. 初始化局部变量表

a被存储在局部变量表的索引0处。

b被存储在局部变量表的索引1处。

  1. 执行方法体

int sum = a + b;会在操作数栈上执行,然后将结果存储在局部变量表的索引2处。

  1. 返回结果:将sum的值从局部变量表中取出,并作为方法的返回值。

栈帧结构示意图

1
2
3
4
5
6
7
8
9
10
11
+--------------------+
| 局部变量表 |
|--------------------|
| 索引0: a = 5 |
| 索引1: b = 10 |
| 索引2: sum = 15 |
+--------------------+
| 操作数栈 |
+--------------------+
| 帧数据 |
+--------------------+

在这个过程中,ab作为方法的形参被存储在局部变量表中。因此,方法的形参在JVM中存储于栈帧的局部变量表中。

 wechat
天生我才必有用