虚拟机字节码执行引擎
创始人
2024-11-15 03:33:05
0

代码编译的结果从本地机器码转换为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
虚拟机的执行引擎是依托于物理机的执行引擎的,物理机的执行引擎是直接建立在处理器,缓存,指令集和操作系统层面的,而虚拟机的执行引擎则是由软件自行实现的。

运行时栈帧结构

java虚拟机以方法作为最基本的执行单元,栈帧则是用于支持虚拟机进行方法调用,执行和返回的基本单位的数据结构。
每一个栈帧都包括了局部变量表,操作数栈,动态连接和方法返回地址等信息。
一个线程同一时刻,对于执行引擎,只针对执行栈顶方法(当前栈帧,当前方法),其所有的字节码都是针对当前栈帧进行操作。

局部变量表

存放方法内部的变量,在编译为class文件时,就已经确定好了空间。

操作数栈

同局部变量表一样,其最大深度也在编译时写入到了class文件的Code属性中的max_stacks数据项中了。
在方法初,方法的操作数栈是空的,在方法执行过程中会有操作数被压入栈中,然后出栈计算等。比如两个int被压入,取出乘后再压入。

方法返回

有两种方式:

  1. 方法返回值给调用者
  2. 遇到异常,并且这个异常没有在方法体内妥善处理,没有找到匹配的异常处理器。

方法调用

java的class文件编译过程中不包含连接,一切调用在class文件中存储的都是符号引用,而不是地址入口。
方法的符号引用存储在.class文件的常量池(Constant Pool)中

0: getstatic     #4  // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc           #6  // String "Hello, world!" 5: invokevirtual #5  // Method java/io/PrintStream.println:(Ljava/lang/String;)V 

这里的#4, #5, #6分别引用常量池中的第4、第5和第6个条目。这些条目包含了对System.out, println方法和字符串常量的符号引用。

编译后的.class文件中的常量池可能包含如下条目(以简化形式表示):

CONSTANT_Class_info: 指向类Example CONSTANT_Methodref_info: 指向Example.sayHello:()V CONSTANT_Class_info: 指向类java/lang/System CONSTANT_Fieldref_info: 指向java/lang/System.out:Ljava/io/PrintStream; CONSTANT_Methodref_info: 指向java/io/PrintStream.println:(Ljava/lang/String;)V CONSTANT_String_info: 包含字符串"Hello, world!" 

方法调用阶段唯一的任务就是确定被调用方法的版本

解析:编译期可知,运行期不可变(非虚方法),在编译时就将符号引用转换为直接引用

这些符号引用,在类加载的解析阶段,会将其中的一部分符号引用转换为直接引用,这类可以直接转换的方法的版本在编译时刻就确定下来了,这类方法调用是:解析
具体方法:静态方法(与类直接相关),私有方法(外部不可访问),都不能被重写,实例构造器,final方法。

静态分派(在编译时发生)重载

引用类型(外观类型,声明类型)
实际类型(运行时类型)
重载会使用引用类型,而不是实际类型。

分派:由jvm确认重写方法

Human man=new Man(); Human woman=new Woman(); man.sayHello(); woman.sayHello(); 
从子类到父类,从下往上判断符合的方法,返回方法地址

在动态调用重写的方法中,首先是建立woman和man的内存空间,调用man和woman的实例构造器,将这两个引用放到局部变量表的变量槽中,将两个对象引用压到栈顶,执行方法调用,找到栈顶对象的实际类型,如果在这个类中有合适的方法并且访问权限相符,返回这个方法的地址,否则,按照继承关系从下往上依次对这个类的各个父类进行第二步的搜索和验证,如果通过则返回其符合的父类地址

字段没有多态性

相关内容

热门资讯

透视挂透视!德扑ai智能机器人... 透视挂透视!德扑ai智能机器人,(德扑ai)都是是真的有挂(详细辅助切实教程)1、德扑ai智能机器人...
透视规律(Wpk)微扑克辅助器... 透视规律(Wpk)微扑克辅助器ios(透视)详细辅助微扑克教程(都是真的有挂);1、许多玩家不知道微...
透视私人局(AAPOKEr)a... 透视私人局(AAPOKEr)aapoker俱乐部(透视)一直是有挂(详细辅助爆料教程);1、aapo...
透视辅助!德扑ai助手,(德州... 透视辅助!德扑ai助手,(德州nzt)果然存在有挂(详细辅助可靠教程)1、进入到德扑ai助手黑科技之...
透视脚本(wpK)微扑克全自动... 透视脚本(wpK)微扑克全自动机器人(透视)详细辅助存在挂教程(总是存在有挂)1、进入到微扑克全自动...
透视最新(aapokeR)aa... 透视最新(aapokeR)aapoker猫腻(透视)果然有挂(详细辅助微扑克教程);小薇(透视辅助)...
透视苹果版!德扑起手牌胜率图,... 透视苹果版!德扑起手牌胜率图,(wpk德州)真是存在有挂(详细辅助揭秘教程);1、下载好德扑起手牌胜...
透视app(wPk)微扑克辅助... 透视app(wPk)微扑克辅助机器人(透视)详细辅助技巧教程(一直存在有挂);小薇(透视辅助)致您一...
透视有挂(aapoKER)aa... 透视有挂(aapoKER)aapoker猫腻(透视)都是有挂(详细辅助分享教程);进入游戏-大厅左侧...
透视教学(wPK)wpk俱乐部... 透视教学(wPK)wpk俱乐部(透视)详细辅助技巧教程(本来有挂);wpk俱乐部辅助器中分为三种模型...