Java虚拟机工作原理

上传人:cl****1 文档编号:564695026 上传时间:2023-03-01 格式:DOCX 页数:35 大小:202.89KB
返回 下载 相关 举报
Java虚拟机工作原理_第1页
第1页 / 共35页
Java虚拟机工作原理_第2页
第2页 / 共35页
Java虚拟机工作原理_第3页
第3页 / 共35页
Java虚拟机工作原理_第4页
第4页 / 共35页
Java虚拟机工作原理_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Java虚拟机工作原理》由会员分享,可在线阅读,更多相关《Java虚拟机工作原理(35页珍藏版)》请在金锄头文库上搜索。

1、As the Java Virtual Machine is a stack-based machine, almost all of its instructions involve the operand stack in some way. Most instructions push values, pop values, or both as they perform their functions.Java虚拟机是基于栈的(stack-based machine)。几乎所有的java虚拟机的指令,都与操作数栈(operand stack)有关绝大多数指令都会在执行自己功能的时候进行

2、入栈、出栈操作。1 Java 体系结构介绍Javas architecture arises out of four distinct but interrelated technologies, each of which is defined by a separate specification from Sun Microsystems:1.1 Java 体系结构包括哪几部分?Java体系结构包括4个独立但相关的技术the Java programming language T程序设计语言the Java class file format 字节码文件格式the Java Applic

3、ation Programming InterfaceT 应用编程接口the Java Virtual Machine T 虚拟机1.2 什么是 JVMjava 虚拟机和 java API 组成了 java 运行时。1.3 JVM 的主要任务。Java 虚拟机的主要任务是装载 class 文件并执行其中的字节码。Java虚拟机包含了一个类装载器。类装载器的体系结构二种类装载器启动类装载器用户定义的类装载器启动类装载器是JVM实现的一部分当被装载的类引用另外一个类时,JVM就是使用装载第一个类的类装载器装载被引用的类。1.4 为什么 java 容易被反编译? 因为java程序是动态连接的。从一个

4、类到另一个类的引用是符号化的。在静态连接的 可执行程序中。类之间的引用只是直接的指针或者偏移量。相反在java的class文件中, 指向另一个类的引用通过字符串清楚的标明了所指向的这个类的名字。 如果引用是指向一个字段的话。这个字段的名字和描述符(字段的类型)会被详细说明。 如果引用指向一个成员方法,那么这个成员方法的名字和描述符(方法的返回值类型, 方法参数的数量和类型)会被详细说明。 包含对自己字段和成员方法的符号引用。 包含可选的调试信息。 (包括局部变量的名称和类型)1.5 垃圾回收器缺点:无法确认什么时候开始回收垃圾,无法确认是否已经开始收集,也无法确认要持续多长时间2 平台无关3

5、安全4 网络移动性5 Java 虚拟机executionengine-皿严必interfacecrlivemethodlibrariesthread 1thread 3pc registersNyTh reacts Q pcthe incihodObjects type Vi wntype duiEiG1 a 阴 inianc fbr Ob j e c tClas instance for RumnbleClasy itisianee for ThreadCla.33 insLiiiKX (ur Cl-oneMe帘別汕以 恂r MyThceadA iViihdbk MyThrad objwlT

6、hreads 1|W dataClonei tiles type date每个 JVM 都有一个类装载子系统。 pc寄存器的值指示下一条将被执行的指令。 java栈记录存储该线程中java方法调用的状态。(包括局部变量,参数,返回值, 运算的中间结果。) 这些内存区域是私有的。任何线程都不能访问另一个线程的pc寄存器和java栈 java栈由许多栈帧组成。一个栈帧包含一个java方法的调用的状态。 当线程调用一个方法的时候,虚拟机压入一个新的栈桢到该线程的java栈中。 当方法返回时,这个栈桢被从java栈中弹出并抛弃。 引用有3中,类类型,接口类型,数组类型。JVM中,最基本的数据单元是字。

7、至少选择32位作为字长。JVM有两种类装载器: 启动类装载器(JVM实现的一部分,每个JVM都必须有一个) 用户自定义的类装载器(JAVA程序的一部分,必须继承java.lang.CloassLoade)。 由不同的类装载器装载的类被放在虚拟机内部的不同的命名空间中。 方法区: 大小不固定,根据需要动态调整 方法区可以被垃圾回收 包含提取装载的类的信息,放到方法区 JVM总能通过存储于方法区的内存信息来确定一个对象需要多少内存 类的静态变量也放到方法区。 虚拟机为装载的每个类存储如下信息: 这个类型的全限定名这个类型的直接超类的全限定名 这个类型是类类型还是接口类型 这个类的访问权限修饰符 任

8、何直接超接口的全限定名的有序列表 该类型的常量池 该类型所用常量的一个有序集合,包括直接常量(String,Integer,floating point),和对其他类型,字段,方法的符号引用 字段信息 字段名 字段类型 字段的修饰符 声明的顺序 方法信息 方法名 方法的返回值类型 方法的参数和类型,顺序 方法的修饰符 方法的操作码 操作数栈和该方法的栈帧中局部变量区的大小 异常表 除了常量以外的所有类(静态)变量 一个到类CloassLoader的引用 一个到Class类的引用 方法表 虚拟机为每一个装载的非抽象类都生成一个方法表堆 一个java程序独占一个JVM, 个JVM中只存在一个堆。所

9、以,每个java 程序有它自己的堆,但同一个java程序的多个线程共享一个堆运行时创建的所有类实例 数组对象垃圾回收器 回收内存 移动对象以减少碎片 不必是连续的内存,可以动态的扩展和收缩 一个JVM的实现的方法区可以在堆顶实现栈帧 栈帧由3部分组成:局部变量区,操作数栈,帧数据区。局部变量区,操作数栈的大小在编译的时候就确定了。 局部变量区 以字长为单位,从 0 开始计数的数组。 int, float, reference, return address 只占据一个字长 byte, short, char存入数组前转换成int,占据一个字长 long, double 占据 2 个字长。 包含

10、对应方法的参数和局部变量, 方法的局部变量任意决定顺序,甚至一个索引指代两个变量,(当2个变 量的作用域不重复时)操作数栈 以字长为单位的数组,但不是通过索引来访问,而是通过标准的栈操作 存贮数据的方式和局部变量区一样。帧数据区 帧数据区保存常量池解析,正常方法返回,异常派发机制等信息执行引擎 线程: JVM只规定了最高级别的线程会得到大多数的CPU时间, 较低优先级别的线程,只有在所有比它优先级更高的线程全部阻塞的情况 下才能保证得到CPU时间。 级别低的线程在级别高的线程没有被阻塞的时候,也可能得到CPU时间, 但是这没有任何保证。 每个虚拟机都有一个主存,用于保存所有的程序变量(对象的实

11、例变量, 数组的元素,以及类变量)。每一个线程都有一个工作内存,线程用它保 存所使用和赋值的“工作拷贝”。 局部变量和参数,因为他们是每个线程私有的,可以逻辑上看成是工作内 存或者主存的一部分。6 字节码文件8 位字节的二进制流 classFile 表的格式Type NameCountu4magic1u2minor version1u2major version1u2constant pool count1cp infoconstant poolconstant pool count -1u2access flags1u2this class1u2superclass1u2interf

12、aces count1u2interfacesinterfaces countu2fields count1field infofieldsfields countu2methods count1method infomethodsmethods countu2attributes count1attribute infoattributesattributes countConstant pool tags 常量池标志每一个标志都有一个相对应的表。表名通过在标志后面加上”info ”后缀来产生Entry TypeTagValueDescriptionC0NSTANT Utf81A UTF-8

13、 encoded Unicode stringCONSTANT Integer3An int literal valueCONSTANT Float4A float literal valueCONSTANT Long5A long literal valueCONSTANT Double6A double literal valueCONSTANT_Class7A symbolic reference to a class or interfaceCONSTANT String8A String literal valueCONSTANT Fieldref9A symbolic refere

14、nce to a fieldCONSTANT_Methodref10A symbolic reference to a method declared in a classCONSTANT_InterfaceMethodref11A symbolic reference to a method declared in an interfaceCONSTANT_NameAndType12Part of a symbolic reference to a field or method7 类型的声明周期 装载 通过该类型的完全限定名,产生一个该类型的二进制数据流 解析这个二进制数据流为方法区内的内部数据结构 (并在堆上)创建一个表示该类型的java.lang.Class类的实例 连接(已读入的二进制形式的类型数据合并到虚拟机的运行时状态中去) 验证(保证java类型

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号