深入理解JVM6-虚拟机字节码执行引擎

虚拟机字节码执行引擎:

不同的虚拟机实现里,可能会有解释执行(边解释边执行)和编译执行(通过即时编译器产生本地代码执行)的混合模式或单独的某种模式。

一、运行时栈帧结构

编译时,栈帧中需要多大的局部变量表,多深的操作数栈就已经确定,存储在方法表的Code属性中。因此一个栈帧需要分配的内存大小,不会受到程序运行期间变量数据的影响,而仅仅取决于具体的虚拟机实现。

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

栈帧包含的信息:

  • 局部变量表:存放方法参数和方法内部定义的局部变量。
    • 局部变量表以容量槽(Variable Slot)为最小单位,大于等于32位,可以随处理器变化。
    • reference类型可能是32位也可能是64位。
    • 局部变量表在栈中,属线程私有,无论读写两个连续的slot是否为原子操作,都不会引起数据安全问题。
    • 局部变量表使用索引定位,第一个slot存储this对象的引用。
    • 为了节省栈帧空间,局部变量表中的slot可以重用。
    • 局部变量必须手动赋初始值。
  • 操作数栈:一个后入先出的栈
    • 操作数栈的每一个元素可以是任意的Java数据类型(包括long,double)
    • 通过操作数栈来进行算术运算或调用其他方法时来进行参数传递
    • JVM做了一些优化处理,使得两个栈帧出现一些重叠,下面栈帧的部分操作数栈与上面栈帧的局部变量表重叠,在进行方法调用时共享一部分数据,无需进行额外的参数复制传递。
  • 动态连接
    • 静态解析:符号引用在类加载阶段或第一次使用时转化为直接引用
    • 动态连接:符号引用在运行期间转化为直接引用。
    • 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,为了支持方法调用过程中的动态连接。
  • 方法返回地址
  • 附加信息(调试相关的信息)

二、方法调用 :确定调用哪一个方法

所有方法调用中的目标方法在class文件里都是一个常量池中的符号引用。

静态方法和private方法,实例构造器,父类方法这4类(非虚方法)在类加载阶段进行解析,把符号引用解析为直接引用。除了这4类非虚方法以及final方法之外的方法都成为虚方法。

解析调用一定是个静态的过程。

Dispatch(分派)调用可能是静态的,也可能是动态的,根据dispatch依据的宗量数分为单分派和多分派。可以两两组合。

在编译阶段,javac编译器根据参数的静态类型而不是实际传入参数的类型来决定使用哪个重载版本。

所有依赖静态类型(定义类型而不是实际类型)来定位方法执行版本的分派动作称为静态分派(方法重载)。静态分派发生在编译阶段。

动态分派(重写):在运行期根据实际类型确定方法执行版本的过程。

方法的接收者和方法的参数统称为方法的宗量。单分派基于一个宗量对目标方法进行选择,多分派则根据多余一个宗量对目标方法进行选择。Java语言的静态分派属于多分派类型(方法调用者的静态类型和方法参数),Java语言的动态分派属于单分派类型(方法调用者的静态类型)。

因动态分派频繁,为类在方法区中建立一个方法表,存放着各个方法的实际入口地址。具有相同方法签名的方法,在父类、子类的虚方法表中都应当有一样的索引序号。方法表一般在类加载的连接阶段进行初始化,准备了类的变量初始值后,虚拟机会把类的方法表也初始化完毕。 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值