📅  最后修改于: 2020-02-10 15:10:38             🧑  作者: Mango
对于每个线程,JVM在创建线程时都会创建一个单独的堆栈。Java虚拟机堆栈的内存不必是连续的。Java虚拟机仅直接在Java堆栈上执行两项操作:推送和弹出框架。特定线程的堆栈可以称为运行时堆栈。该线程执行的每个方法调用都存储在相应的运行时堆栈中,包括参数、局部变量、中间计算和其他数据。完成方法后,将从堆栈中删除相应的条目。完成所有方法调用后,堆栈将变为空,在终止线程之前,JVM将销毁该堆栈。存储在堆栈中的数据可用于相应的线程,而不适用于其余线程。因此,我们可以说本地数据是线程安全的。堆栈中的每个条目都称为堆栈帧或激活记录。
堆栈框架结构
堆栈框架主要由三部分组成:局部变量数组,操作数堆栈和框架数据。当JVM调用Java方法时,它首先检查类数据以确定该方法在局部变量数组中所需要的字数(局部变量数组和操作数堆栈的大小,对于每个单独的方法,以字为单位)。
操作数堆栈:它为调用的方法创建适当大小的堆栈框架,并将其压入Java堆栈。
1.局部变量数组(LVA):
// class声明
class Example
{
public void bike(int i, long l, float f,
double d, Object o, byte b)
{
}
}
2.操作数堆栈(OS):
3.帧数据(FD):