当前位置: 首页 > news >正文

福州做网站哪家最好合肥市城乡建设网站

福州做网站哪家最好,合肥市城乡建设网站,网站关键词越多越好吗,电子商务网站建设规划论文第八章 虚拟机字节码执行引擎 8.1 意义 不受物理条件制约地定制指令集与执行引擎的结构体系#xff0c;能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流#xff0c;处理过程是字节码解析执行的等效过程#xff0c;输出的是执行结果 8.2 运行时栈帧结构…第八章 虚拟机字节码执行引擎 8.1 意义 不受物理条件制约地定制指令集与执行引擎的结构体系能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流处理过程是字节码解析执行的等效过程输出的是执行结果 8.2 运行时栈帧结构 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息 以Java程序的角度来看同一时刻、同一条线程里面在调用堆栈的所有方法都同时处于执行状态。而对于执行引擎来讲在活动线程中只有位于栈顶的方法才是在运行的只有位于栈顶的栈帧才是生效的其被称为“当前栈帧”Current Stack Frame与这个栈帧所关联的方法被称为“当前方法”Current Method 编译Java程序源码的时候栈帧中需要多大的局部变量表需要多深的操作数栈就已经被分析计算出来也就是一个栈帧需要分配多少内存并不会受到程序运行期变量数据的影响而仅仅取决于程序源码和具体的虚拟机实现的栈内存布局形式 8.2.1 局部变量表 存放方法参数和方法内部定义的局部变量编译时就确定了该方法局部变量表的最大容量。变量槽Slot为最小单位一个变量槽可以存放一个32位以内的数据类型对于64位的数据类型Java虚拟机会以高位对齐的方式为其分配两个连续的变量槽空间。Java语言中明确的64位的数据类型只有long和double两种Java虚拟机通过索引定位的方式使用局部变量表索引值的范围是从0开始至局部变量表最大的变量槽数量。当一个方法被调用时Java虚拟机会使用局部变量表来完成参数值到参数变量列表的传递过程即实参到形参的传递。如果执行的是实例方法, 表中第0位索引默认是记录方法所属对象实例的引用。变量槽可以重用但是可能会影响垃圾收集局部变量不初始化不能使用 8.2.2 操作数栈 当一个方法刚刚开始执行的时候这个方法的操作数栈是空的在方法的执行过程中会有各种字节码指令往操作数栈中写入和提取内容也就是出栈和入栈操作。顾名思义就是用来操作的。 操作数栈中元素的数据类型必须与字节码指令的序列严格匹配也就是说用于整型值的操作不能使用其他的值。 栈帧可以一部分重叠可以共用一部分数据 8.2.3 动态连接 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用符号引用一部分会在类加载阶段或者第一次使用的时候就被转化为直接引用这种转化被称为静态解析。另外一部分将在每一次运行期间都转化为直接引用这部分就称为动态连接 8.2.4 方法返回地址 当一个方法开始执行后只有两种方式退出这个方法 第一种方式是执行引擎遇到任意一个方法返回的字节码指令这时候可能会有返回值传递给上层的方法调用者另外一种退出方式是在方法执行的过程中遇到了异常 一般来说方法正常退出时主调方法的PC计数器的值就可以作为返回地址而方法异常退出时返回地址是要通过异常处理器表来确定的。 8.3 方法调用 方法调用阶段唯一的任务就是确定调用哪个方法不涉及方法内部细节 8.3.1 解析 解析是指当一个方法被调用时JVM 如何确定实际要执行的方法。这里的解析调用具体为方法的调用版本在编译期间就完全确定在类加载的解析阶段就会把涉及的符号引用全部转变为明确的直接引用在运行期是不可改变的方法。 主要有静态方法和私有方法两类适合在类加载阶段进行解析 有五种调用方法的字节码指令 invokestatic 用于调用静态方法invokespecial 用于调用实例构造器()方法、私有方法和父类中的方法invokevirtual用于调用所有的虚方法invokeinterface用于调用接口方法会在运行时再确定一个实现该接口的对象invokedynamic先在运行时动态解析出调用点限定符所引用的方法然后再执行该方法由用户制定逻辑前4种固定在虚拟机内部 只要能被invokestatic和invokespecial指令调用的方法都可以在解析阶段中确定唯一的调用版本Java语言里符合这个条件的方法共有静态方法、私有方法、实例构造器、父类方法4种再加上被final修饰的方法尽管它使用invokevirtual指令调用这5种方法调用会在类加载的时候就可以把符号引用解析为该方法的直接引用。这些方法统称为“非虚方法”Non-Virtual Method与之相反其他方法就被称为“虚方法”Virtual Method。 8.3.2 分派 分派调用是一种方法调用形式可以是静态的也可是动态的。分派具有动态性可以揭示多态的特性比如重写和重载根据实际代码更好理解 静态分派 所有依赖静态类型来决定方法执行版本的分派动作都称为静态分派。静态分派的最典型应用表 现就是方法重载。静态分派发生在编译阶段因此确定静态分派的动作实际上不是由虚拟机来执行 的。虚拟机或者准确地说是编译器在重载时是通过参数的静态类型而不是实际类型作为 判定依据的。由于静态类型在编译期可知所以在编译阶段Javac编译器就根据参数的静态类型决定 了会使用哪个重载版本需要注意Javac编译器虽然能确定出方法的重载版本但在很多情况下这个重载版本并不是“唯 一”的往往只能确定一个“相对更合适的”版本 动态分派 在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。也就是方法重写的本质根源在于虚方法调用指令invokevirtual的执行逻辑 找到操作数栈顶的第一个元素所指向的对象的实际类型记作C如果在类型C中找到与常量中的描述符和简单名称都相符的方法则进行访问权限校验如果通过则返回这个方法的直接引用查找过程结束不通过则返回java.lang.IllegalAccessError异常。否则按照继承关系从下往上依次对C的各个父类进行第二步的搜索和验证过程如果始终没有找到合适的方法则抛出java.lang.AbstractMethodError异常 在Java里面只有虚方法存在字段永远不可能是虚的换句话说字段永远不参与多态。当子类声明了与父类同名的字段时虽然在子类的内存中两个字段都会存在但是子类的字段会遮蔽父类的同名字段 单分派与多分派 方法的接收者与方法的参数统称为方法的宗量单分派是根据一个宗量对目标方法进行选择多分派则是根据多于一个宗量对目标方法进行选择。 虚拟机动态分派的实现 动态分派的方法版本选择过程需要运行时在接收者类型的方法元数据中搜索合适的目标方法一种优化方法是为类型在方法区中建立一个虚方法表使用虚方法表索引来代替元数据查找以提高性能虚方法表中存放着各个方法的实际入口地址。如果某个方法在子类中没有被重写那子类的虚方法表中的地址入口和父类相同方法的地址入口是一致的都指向父类的实现入口。如果子类中重写了这个方法子类虚方法表中的地址也会被替换为指向子类实现版本的入口地址。虚方法表一般在类加载的连接阶段进行初始化准备了类的变量初始值后虚拟机会把该类的虚方法表也一同初始化完毕。除此之外还会使用类型继承关系分析Class Hierarchy AnalysisCHA、守护内联Guarded Inlining、内联缓存InlineCache等多种非稳定的激进优化来争取更大的性能空间
http://www.w-s-a.com/news/910393/

相关文章:

  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发
  • 网站做微信链接怎么做的石桥铺网站建设公司
  • 济南mip网站建设公司做图书馆网站模板
  • app 门户网站网站项目框架
  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息
  • 南宁做网站找哪家好wordpress 更改首页
  • 一个人在家做网站建设品牌策划流程
  • 小网站广告投放wordpress页面添加js
  • 仿制别人的竞价网站做竞价犯法吗wordpress添加版块
  • wordpress主题 站长互联网站备案表
  • 广州品牌策划公司排行南宁seo网络推广公司
  • 营销型网站图片肯德基网站开发
  • 网站的外链是什么wordpress开启菜单
  • 文字字体是什么网站西安博达网站建设
  • 北京南昌网站建设网站查看空间商
  • 网站建设人员职责分布乐清市网站建设设计
  • 网站建设etw网站建设陕西