JAVA虚拟机字节码执行引擎之运行时栈帧结构

导读

本章主要讲解栈帧的体系结构及java字节码在栈帧中是如何执行的,相信了解过java虚拟机体系结构的码友应该都知道,执行程序的主战场在虚拟机栈中,java中的代码执行是通过方法的调用来实现的,方法的调用和接收正好是一个栈帧入栈和出栈的过程,因此可以浅显的理解java字节码就是在栈帧中被解析执行的,通过本章内容,你可以了解到栈帧的体系结构,及栈帧中每一个部件的作用。

一、虚拟机栈与栈帧体系结构

在讲解栈帧之前我们先来拓展点内容,.java文件是如何在虚拟机中能够被识别并执行的?
JAVA虚拟机字节码执行引擎之运行时栈帧结构_第1张图片
JVM本身也拥有自己定义的一套字节码指令集,这些指令与.class文件中的16进制值对应,这套指令还不是真正的机器指令,需要JVM解析成机器指令后才能运行。
虚拟机栈
说到虚拟机栈,想必大家都非常熟悉了,它是JVM体系结构中的重要部分,是线程私有内存区域,每当创建一个线程时都会在JVM内部划分出一块虚拟机栈供其使用,也就是说,JVM中可以有多个虚拟栈结构。
栈帧
栈帧是用于支持虚拟机进行防腐调用和方法执行的数据结构,它是虚拟机栈的元素,同时栈帧还分为更细的结构,其内部由局部变量表、操作数栈、动态链接、方法返回地址等结构组成。
JAVA虚拟机字节码执行引擎之运行时栈帧结构_第2张图片
一个方法的调用过程,都对应着一个栈帧在虚拟机栈中的入栈和出栈过程,栈帧中的局部变量表需要多大的内存以及多深的操作数栈在编译器已经确定了,并把这部分信息写到了方法表中的Code属性之中,在方法调用前JVM会根据这部分信息分配好内存,不会受到运行期变量的数据而影响其大小;一个方法的调用链可能会很长,当很多方法都处于执行状态,对于执行引擎来说,在向前线程的虚拟机栈中,只有位于栈顶的战争才是生效的,称之为当前栈帧,与之对应的方

你可能感兴趣的:(JVM)