Bootstrap

Java栈帧个人理解(浅层)如诗般娓娓叙述,编织着方法的律动,随着调用的节拍,在内存中轻盈舞蹈。栈帧就像是恋爱中的甜蜜约定!

Java

1、栈帧

理解:
在这里插入图片描述

栈帧就像是恋爱中的甜蜜约定!每当方法调用来临,它就像心动的那一刻,悄悄出现在内存里,装载着我们的爱意。它们就像是我们的恋爱小秘密,存储着宝贵的局部变量和操作数,让我们的程序可以亲密无间地交流。每一次调用结束,栈帧就像是美好的回忆,温柔地消散在空中,却留下了深深的印记。真是让人感到满满的幸福和甜蜜呢!

chatgpt:

Java栈帧(Stack Frame)是在Java虚拟机(JVM)中用于支持方法调用和执行的一种数据结构。每当执行一个方法时,都会在线程的栈上创建一个栈帧来存储方法的局部变量、操作数栈、动态链接信息和方法返回地址等相关数据。

栈帧由以下几个主要部分组成:

  1. 局部变量表(Local Variable Table):局部变量表用于存储方法中定义的局部变量和方法参数。这些局部变量包括基本类型(如整数、浮点数)和对象引用。局部变量表的大小在编译期确定,并且在方法调用时分配和释放。

  2. 操作数栈(Operand Stack):操作数栈用于执行方法时的临时计算和操作。它可以存储和处理方法中的操作数,如整数、浮点数和对象引用等。操作数栈通过压栈(push)和出栈(pop)操作来完成计算过程。

  3. 动态链接信息(Dynamic Linking):栈帧中还包含了动态链接信息,用于在运行时解析和连接方法的引用。它包括方法调用的目标方法的符号引用和实际入口地址,以便在运行时能够正确地执行方法调用。

  4. 方法返回地址(Return Address):方法返回地址记录了方法执行完后需要返回的位置。它可以是一个指向调用方法的下一条指令的地址,也可以是异常处理器的地址,用于处理异常情况。

  5. 附加信息:栈帧的高度、虚拟机版本信息

栈帧信息:附加信息+动态链接+方法的返回地址

栈帧的创建和销毁是根据方法的调用和返回进行的。每当一个方法被调用时,JVM会创建一个新的栈帧并将其推入当前线程的栈顶。而当方法执行完成或遇到返回指令时,栈帧会被弹出并销毁,控制权返回给调用方。

通过栈帧,Java虚拟机能够支持方法的嵌套调用和执行,保证了方法间的数据隔离和程序的正确执行。

生命周期:随着方法的调用而创建,随着方法结束而销毁,

存储:方法的局部变量信息

局部变量表:方法中定义的局部变量以及方法的参数,单纯的存储单元

操作数栈:压栈出栈的方式存储操作数

int a=1;
int b=1;
int c=a+b;
//a,b放入局部变量表  a、b拿出来 在操作数栈操作 在放回去

方法返回地址:两种方式退出

1、遇到方法的返回字节码指令 return

2、出现了异常,有异常处理器,没有 抛出异常

动态链接

网:动态链接是为了支持方法的的动态调用过程

官网:动态链接将这些符号引用转成直接引用 为了支持java的多态

void a(){
  b();
}
void b(){
  c();
}
void c(){
 
}

java多态的存在,只有在运行执行中知道

在这里插入图片描述
个人:

;