《深入理解Java虚拟机》笔记之第8章 虚拟机字节码执行引擎

1Java虚拟机的执行引擎都是一致的:输入的字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。

 

2、栈帧

1)每个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。

 (2)方法返回地址:只要本方法的异常表中没有搜索到匹配的异常处理器,那么将不会给它的上层调用者产生任何返回值。

 

3、方法调用

一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(即直接引用),在类加载期间甚至到运行期间才能确定目标方法的直接引用。

1)解析

  类加载的解析阶段,将其中一部分符号引用转化为直接引用。即调用目标在编译器进行编译时就必须确定下来,这类方法的调用称为解析。主要包括静态方法和私有方法(还包括实例构造器、父类方法、final方法),因为它们不可能通过继承或别的方式重写出其他版本。

2)分派

动态分派:运行期根据变量的实际类型确定方法执行版本的分派过程。

Java重写的本质:第一次在运行期确定接收者的实际类型,然后把常量池中的类方法符号引用解析到不同的直接引用上。

 

 

4Java编译器输出的指令流,基本上是一种基于栈的指令集架构。相比基于寄存器的指令集,其优点在于可移植性,缺点在于执行速度相对较慢。

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/iteye_7011/article/details/82538634
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞