虚拟机字节码执行引擎
来源:互联网 发布:linux sleep usleep 编辑:程序博客网 时间:2024/05/18 19:19
- Java执行引擎的过程为:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。
- 栈帧是支持虚拟机方法调用与执行的数据结构,栈帧存储了方法的局部变量表,操作数栈,动态连接,方法返回地址等信息。每一个方法的调用都是栈帧在虚拟机栈中入栈和出栈的过程。在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧。
- 局部变量表:
- 局部变量表是一组变量值存储空间,用于存放方法参数与方法内部定义的局部变量。
- 在方法执行时,虚拟机使用局部变量表完成参数值到参数变量列表的传递过程。
- 类变量在类加载的过程中有两次赋值阶段,准备阶段与初始化阶段;实例变量在对象创建的时候也有两次赋值;但是一个局部变量在定义之后必须赋初始值,不然无法使用。
- 操作数栈:
- 在方法执行过程中,会有各种字节码指令往操作数栈中进行写入与读取内容。
- 动态连接:
- Class文件中常量池中有大量符号引用,这些符号引用在类加载时会有一部分在解析阶段转换为直接引用(指向实际的内存地址),称为静态解析;还有一部分在运行期间解析,称为动态连接。
- 方法返回地址:
- 方法调用:
- 一切方法调用在Class文件中存储的都是符号引用,而不是方法在实际运行时在内存的入口地址(直接引用)。在类加载阶段,会将其中一部分符号引用转换为直接引用,这种解析能成立的前提是:方法在程序运行之前就有一个可确定的调用版本,并且这个方法在运行期间是不可改变的。
- 在Java中符合“编译期可知,运行期不变”这个要求的方法主要包括:静态方法,私有方法,实例构造器,父类方法,前者与类型相关联,后者在外部不可访问。
- 分派:
- 静态分派
- 变量的静态类型在编译期可知,而实际类型只有到了运行期才能确定,编译器在编译程序的时候根本不知道变量的实际类型。
- 虚拟机(准确来说是编译器)在重载的时候是根据参数的静态类型作为判断依据;javac编译器会根据参数的静态类型决定使用哪个版本。
- 静态分派的典型应用是方法重载。
- 动态分派:
- 在运行期根据实际类型确定方法执行版本的分派称为动态分派。
- 动态分派主要应用于方法的重写。
0 0
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 一丝不能苟的计算机编程语言
- 顺序查找
- C#使用HtmlAgilityPack爬虫实例
- java实验1-3:选择排序
- 輪廓(findContours、drawContours)
- 虚拟机字节码执行引擎
- 简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法
- Java过滤器与SpringMVC拦截器之间的关系与区别
- jquery中prop()方法和attr()方法的区别浅析
- WebSite---前台系统图片验证码心得
- li标签绑定事件
- 图像处理 MATLAB 读取摄像头
- NOIP 2011 普及组 复赛 reverse 数字反转
- CoordinatorLayout 与Behavior