JAVA虚拟机学习笔记之基于字节码的执行引擎简单概要

本文深入探讨虚拟机执行引擎的工作原理,包括字节码解析、执行结果输出、解释与编译执行方式,详解栈桢结构及其在方法调用中的作用,方法调用指令与分派调用的区别,以及动态语言支持的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、虚拟机执行引擎工作内容
输入字节码文件->字节码解析->输出执行结果
二、执行引擎执行java代码类型
1、解释执行:通过解释器执行
2、编译执行:通过即时编译器产生本地代码执行
三、栈桢结构
1、栈桢存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息
2、每一个方法的调用的过程,都对应一个栈桢在虚拟机栈里从入栈到出栈的过程
3、局部变量不像类变量那样存在“准备阶段”,如果一个局部变量没有赋予初始值是不能使用的。
4、操作数栈是一个后入先出的栈,在方法的执行过程中,会有各种字节指令往操作数栈中写入和提取内容(即入栈出栈)
5、一个方法执行后,只有两种方法退出,分别是正常完成出口和异常完成出口
6、方法退出过程,把当前栈桢出栈,恢复上层方法的局部变量表和操作数栈,把返回值(如果有)压如调用者的操作数栈中,调整PC计数器的值以指向方法调用后一条指令
四、方法调用
1、方法调用不等同于方法执行,方法调用阶段的唯一任务确定被调用方法的版本
2、5个方法调用指令
invokestatic:调用静态方法
invokespecial:调用实例构造器、私有方法和父类方法
invokevirtual:调用所有虚方法
invokeinterface:调用接口方法
invokedynamic:在运行时动态解析出调用点限定符所引用的方法,然后执行该方法
3、解析调用是静态的过程,在编译期间就完全确定,在类装载的解析阶段就会把涉及的符号引用全部转变为可确定的直接引用。
4、invokestatic,invokespecial指令调用的方法可以在解析时确定版本,称之为非虚方法,其他方法称为虚方法(final方法除外)
5、分派调用的静态分派体现在重载方法的调用,动态分配体现在重写方法的调用
6、静态分配的依据是静态类型和方法参数,动态分配的依据是方法接受者的实际类型
7、虚拟机使用虚方法表和接口方法表来提升性能,方法表中记录方法的真正实现入口,以此来代替元数据查找。

五、动态语言支持
jdk1.7增加java.lang.invoke包来实现JSR-292,提供一种新的动态确定目标方法的机制,称为MethodHandle。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值