JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧?
JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧?你掌握的怎么样呢?
JVM运行时数据区的虚拟机栈你知道吗?
- 虚拟机栈是一个线程执行的区域,保存着一个线程中方法的调用状态。换句话说,一个Java线程的
运行状态,由一个虚拟机栈来保存,所以虚拟机栈肯定是线程私有的,独有的,随着线程的创建而创
建。 - 每一个被线程执行的方法,为该栈中的栈帧,即每个方法对应一个栈帧。调用一个方法,就会向栈中压入一个栈帧;一个方法调用完成,就会把该栈帧从栈中弹出。
虚拟机栈的基本结构是什么呢?栈帧又是什么结构组成的呢?
- 虚拟机栈的最小组成单位:栈帧,栈帧的基本作用:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间。每个栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向运行时常量池的引用(A reference to the run-time constant pool)、方法返回地址(Return Address)和附加信息。
- 栈帧的基本结构是:
- 局部变量表:方法中的局部变量表以及方法的参数都会放到这里
- 操作数栈:也是一个栈,他是压栈以及出栈的方法来存储操作数的
- 方法的返回地址:一个方法执行之后,只有遇到返回的字节码指令,或者异常会直接返回
- 动态链接:将符号方法引用直接转变为直接方法引用
栈帧各个结构的作用是什么呢?
局部变量表:方法中定义的局部变量以及方法的参数存放在这张表中局部变量表中的变量不可直接使用,如需要使用的话,必须通过相关指令将其加载至操作数栈中作为操作数使用。
操作数栈:以压栈和出栈的方式存储操作数。
动态链接:每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接(Dynamic Linking)。
方法返回地址:当一个方法开始执行后,只有两种方式可以退出,一种是遇到方法返回的字节码指令;一种是遇见异常,并且这个异常没有在方法体内得到处理。
详细的说说栈帧结构中的动态链接?
-
动态链接是为了支持方法的动态调用过程 。
-
动态链接将这些符号方法引用转换为具体的方法引用
-
符号引用转变为直接引用,为了支持java的多态。
void a(){
b();
}
void b(){
c();
}
void c(){
}
总结:
JVM知识在面试过程中非常高频,大家一定要牢牢掌握,如果以上文章有帮助到你,希望可以点个关注,留下属于你的足迹,比心!我们下节再见哦。