虚拟机字节码执行引擎
创始人
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机器人(微扑克)其实是有挂(有挂分享)-哔哩哔哩1、打开...
终于懂了(德州ai软件购买)德... 自定义德州线上辅助软件系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管...
必知教程!“wpk到底有没有外... 1、必知教程!“wpk到底有没有外挂”wpk有长期盈利玩家吗(wpK)一直有挂(有挂辅助)-哔哩哔哩...
黑科技黑科技“wepoke黑科... 黑科技黑科技“wepoke黑科技”wepoke透明挂(透明黑科技)切实是有挂(确实有挂)-哔哩哔哩1...
查到实测!微扑克数据采集,微扑... 查到实测!微扑克数据采集,微扑克透牌(微扑克)真是真的有挂(有挂透明挂)-哔哩哔哩1、微扑克数据采集...
必备科技(德州ai辅助神器软件... 必备科技(德州ai辅助神器软件)德州线上外挂(竟然存在有挂)-哔哩哔哩;德州ai辅助神器软件黑科技是...
黑科技科技“wepoke智能a... 黑科技科技“wepoke智能ai”wepoke辅助透(透明挂黑科技)确实真的有挂(有挂规律)-哔哩哔...
玩家必备科技!“wpk最新黑科... 玩家必备科技!“wpk最新黑科技”wpk俱乐部黑科技(WPK)果然有挂(有挂分析)-哔哩哔哩;人气非...
今日头条!微扑克必胜技巧,微扑... 今日头条!微扑克必胜技巧,微扑克如何让系统发好牌(微扑克)果然存在有挂(有挂秘诀)-哔哩哔哩1、点击...
最新技巧(德州ai辅助软件)德... 您好,德州之星透视辅助器这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家...