虚拟机字节码执行引擎

简介: 虚拟机字节码执行引擎

虚拟机字节码执行引擎

  • 虚拟机执行引擎脑图:
  • 执行引擎是Java虚拟机核心的组成部分之一
  • 在软件层面实现,具体的指令集不受硬件层面影响

运行时栈帧结构

  • JVM以方法作为最基本执行单元;而栈帧则是支持虚拟机对方法进行调用、执行的数据结构
  • 栈帧包括了方法的局部变量表、操作数栈、动态链接、方法返回地址等
  • 栈帧结构图:

局部变量表

  • 局部变量表(Local Variables Table)是一组变量值的存储空间,用于存放方法参数和方法内部定义 的局部变量
  • 变量槽是局部变量表的最小单位,变量槽支持32位的数据类型存储;而对于Long、Double(64位)的数据类型则需要2个连续变量槽

操作数栈

  • 操作数栈又称操作栈,它是一个后入先出的栈.
  • 操作数栈的每一个元素可以是任意的数据类型,32位数据元素占的栈容量为1,64位数据元素的栈容量位2;

动态连接

  • 在类加载阶段将常量池符号引用转化为直接引用称为静态解析;另一部分符号引用在运行时转化为直接引用,称为动态连接

返回地址

  • 一个方法的执行会产生两个结果,一个为正常调用完成,会产生方法返回指令,返回指令会决定返回值是否存在以及返回值的类型;一个为异常调用完成,不会提供任何返回值;

方法调用

  • 一切方法调用在Class文件中都是符号引用,而不是方法在内存的实际入口;这个特性给Java赋予了极强的动态扩展能力
  • 解析:在类加载的解析阶段,存在着符号引用转化成为直接引用的步骤(这只适用于对于在加载阶段可以确定的方法,如私有类、静态类);换而言之,这种方法适用于无法通过重写、其余方式转变成为其余版本
  • 对于不同的解析阶段,JVM支持五种字节码指令:
  • invokestatic:调用静态方法
  • invokespecial:调用实例构造器()方法、私有方法和父类中的方法
  • invokevirtual:于调用所有的虚方法
  • invokeinterface:调用接口方法,会在运行时再确定一个实现该接口的对象
  • invokedynamic:前面四条指令由JVM指定分派逻辑,这一条由用户指定分派逻辑
  • 在解析阶段可以确定的方法:静态方法、私有方法、构造方法、父类方法、被final修饰的方法
  • 分派
  • Java三大特性继承、多态、封装;分派则是多态的基本体现
  • 静态分派是指在类加载解析阶段可以确定的方法,如:重载
  • 动态分派是指在运行时确定执行的方法,如:重写
  • JVM中动态分派根据实际类型来决定,JVM中根据实际类型决定目标方法;
  • 为了性能考虑,JVM并不会频繁的搜索实际类型元数据,优化手段是虚方法表
  • 虚方法表如图:
  • 虚方法表:
  • 虚方法表记录了各个方法的实际入口地址
  • 子类、父类没有重写,则指向父类方法入口
  • 子类重写父类,则指向子类方法入口
目录
相关文章
|
2月前
|
存储 Java 索引
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
34 0
|
7月前
|
存储 安全 Java
【虚拟机字节码执行引擎】
【虚拟机字节码执行引擎】
|
12月前
|
缓存 Java 大数据
大数据开发基础的编程语言的Java的JVM虚拟机的字节码执行机制
Java虚拟机(JVM)是Java语言的核心,它是一个虚拟的计算机,可以在不同的操作系统上运行Java程序。在Java中,字节码执行机制是JVM的重要组成部分,它负责将编译好的Java代码翻译成机器指令并执行。本文将介绍Java的字节码执行机制和常见问题。
83 0
|
存储 JavaScript 前端开发
JVM系列7-虚拟机字节码执行引擎
JVM系列7-虚拟机字节码执行引擎
69 0
|
存储 Oracle Java
《Java 虚拟机》类文件结构与字节码技术
《Java 虚拟机》类文件结构与字节码技术
《Java 虚拟机》类文件结构与字节码技术
|
架构师 Unix 编译器
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
168 0
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
|
数据采集 缓存 自然语言处理
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
132 0
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
|
存储 Java 索引
虚拟机字节码执行引擎
运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。
992 0
|
Java C++ 索引
深入理解虚拟机之虚拟机字节码执行引擎
执行引擎是java虚拟机最核心的组成部件之一。虚拟机的执行引擎由自己实现,所以可以自行定制指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。
8808 0
|
Java 编译器 索引
虚拟机字节码执行引擎
一、概述 物理机的执行引擎:直接建立在处理器、硬件、指令集和操作系统层面 虚拟机的执行引擎:由自己实现,可以自行制定指令集与执行引擎的结构体系,并且能够执行不被硬件直接支持的指令集格式。 java虚拟机的执行引擎:输入字节码文件,处理过程是字节码解析的等效过程,输出是执行结果。
13767 0