字节码执行引擎知识点总结
以下是在学习了《深入理解JVM》之后的对知识点的总结,其中对方法调用那一章做了大量实践和分析。 文章目录 解释型还是编译型 基于栈还是基于寄存器 字节码指令在哪儿 java虚拟机栈与栈帧的关系 局部变量表 操作数栈 动态连接 方法返回地址 栈帧与方法的关系 字节码指令中的四个方法调用指令 invokevirtual指令解析过程 静态分派,重载,编译期确定 动态分派,重写,运行时确定 解释型还是编译型 字节码的执行有解释型和编译型,根据具体情况才能说明java到底是什么执行方式。 基于栈还是基于寄存器 虚拟机是基于栈的指令集,栈指的是java虚拟机栈,指令集指的字节码指令。 字节码指令在哪儿 执行的字节码指令存放在字节码文件里的方法表里的code属性中。 java虚拟机栈与栈帧的关系 虚拟机栈的基本单位为栈帧,栈帧之间的排列是先进后出。每个栈帧包括了局部变量表,操作数栈,动态连接,方法返回地址以及其他一些信息。 每个栈帧的大小在编译期已经决定,因此栈帧中的每个结构都在编译期确定。 虚拟机栈是线程私有,线程结束栈帧的所有内存都会清除。 局部变量表 局部变量表的单位为slot。 一个slot的大小必须要装的下除long,double类型之外其他基本类型,一般4个字节,也就是32位。 对于long,double类型使用两个slot存放。 局部变量表利用索引来获取值,就如同数组一样