




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java虚拟机原理介绍 目录 Java虚拟机1 java虚拟机的生命周期2 java虚拟机的体系结构Javaclass文件1 magic 魔数 2 minor version和major version3 constant pool count和constant pool 类型的生命周期1 类型的装载 连接和初始化2 对象的生命周期3 卸载类型连接模型动态连接和解析垃圾收集 Java虚拟机生命周期 每运行一个java程序 便得到JAVA虚拟机的实例每个Java程序都运行于它自己的Java虚拟机实例中当程序关闭退出 这个虚拟机实例也就随之消亡程序本身也能够通过调用Runtime类或者System类的exit 方法退出 Java虚拟机体系结构 在Java假虚拟机规范中 一个虚拟机实例的行为时分别按照子系统 内存区 数据类型以及指令这几个术语来描述的 这些组成部分一起展示了抽象的虚拟机的内部抽象体系结构 1 所有的线程都共享方法区 方法区必须被设计为线程安全的 方法区大小不固定2 方法区存储以下类型信息 类的全限定名超类的全限定名是接口还是类类的访问修饰修饰符该类的 常量池 字段信息方法信息类 静态 变量 类变量是由所有类实例共享的 即使没有类实例 也可以访问一个到类ClassLoader引用一个到类的引用3 方法表 运行时数据区 方法区 堆1 同一个java应用所有的线程共享堆空间 由于每一个java程序独占一个java虚拟机实例 因面每个java程序都有它自己的堆空间 堆空间可以分为三部分 一个Eden区 Survivor区和truned区2 由new操作符创建的对象均位于堆中 运行时数据区 java中的堆 运行时数据区 Java中的栈 每启动一个新的线程 java虚拟机都会为它分配一个java栈 java栈上的都是此线程私有的每当启用一个线程时 JVM就为他分配一个Java栈 栈是以帧为单位保存当前线程的运行状态 当前方法 当前帧 当前类 当前常量池 每当线程调用一个Java方法时 JVM就会在该线程对应的栈中压入一个帧 这个帧自然就成了当前帧 当执行这个方法时 它使用这个帧来存储参数 局部变量 中间运算结果等等 Java栈上的所有数据都是私有的 任何线程都不能访问另一个线程的栈数据 Java栈和帧在内存中也不必是连续的 帧可以分布在连续的栈里 也可以分布在堆里 栈帧栈帧由三部分组成 局部变量区 操作数栈和帧数据区 Java的class文件 Class文件的内容 在class文件中 可变长度项的大小和长度位于其实际数据之前 这个特性使得class文件数据流可以被顺序解析 首先读出项的大小 然后读出项数据1 magic 魔数 4个字节2 minor version和major version4个字节3 constant pool count和constant pool4 access flags2个字节5 this class2个字节 6 super class2个字节7 interfaces count和interfaces8 fields count和fields9 methods count和fields10 attributes count和attributes Java代码编译和执行的整个过程包含了以下三个重要的机制 1 Java源码编译机制2 类加载机制3 类执行机制Java代码编译是由Java源码编译器来完成 流程图如下所示 Java字节码的执行是由JVM执行引擎来完成 流程图如下所示 class文件由以下部分组成 1 结构信息包括class文件格式版本号及各部分的数量与大小的信息2 元数据对应于Java源码中声明与常量的信息 包含类 继承的超类 实现的接口的声明信息 域与方法声明信息和常量池3 方法信息 对应Java源码中语句和表达式对应的信息 包含字节码 异常处理器表 求值栈与局部变量区大小 求值栈的类型记录 调试符号信息 Java中的类加载机制 Java中的类加载机制 JVM的类加载是通过ClassLoader及其子类来完成的 类的层次关系和加载顺序可以由下图来描述 BootstrapClassLoader 启动类加载器 JAVA HOME中jre lib rt jar里所有的class 由C 实现 不是ClassLoader子类ExtensionClassLoader 扩展类加载器负责加载java平台中扩展功能的一些jar包 包括 JAVA HOME中jre lib jar或 Djava ext dirs指定目录下的jar包AppClassLoader 系统类加载器负责加载classpath中指定的jar包及目录中classCustomClassLoader 用户自定义类加载器 java lang ClassLoader的子类 属于应用程序根据自身需要自定义的ClassLoader 如tomcat jboss都会根据j2ee规范自行实现ClassLoader Java中的类加载双亲委派机制 JVM在加载类时默认采用的是 双亲委派机制 通俗的讲 就是某个特定的类加载器在接到加载类的请求时 首先将加载任务委托给父类加载器 依次递归 如果父类加载器可以完成类加载任务 就成功返回 只有父类加载器无法完成此加载任务时 才自己去加载 java中的类执行机制 JVM是基于栈的体系结构来执行class字节码的 线程创建后 都会产生程序计数器 PC 和栈 Stack 程序计数器存放下一条要执行的指令在方法内的偏移量 栈中存放一个个栈帧 每个栈帧对应着每个方法的每次调用 而栈帧又是有局部变量区和操作数栈两部分组成 局部变量区用于存放方法中的局部变量和参数 操作数栈中用于存放方法执行过程中产生的中间结果 java类的生命周期 装载 就是把二进制形式的java类型读入java虚拟机中 验证 准备 为类变量分配内存 设置默认值 但是在到达初始化之前 类变量都没有初始化为真正的初始值解析 解析过程就是在类型的常量池中寻找类 接口 字段和方法的符号引用 把这些符号引用替换成直接引用的过程在符号引用被程序首次使用之前 连接这个步骤都是可选的 初始化 为类变量赋予正确的初始值 类实例化 为新的对象分配内存为实例变量赋默认值为实例变量赋正确的初始值java编译器为它编译的每一个类都至少生成一个实例初始化方法 在java的class文件中 这个实例初始化方法被称为 针对源代码中每一个类的构造方法 java编译器都产生一个方法 JVM内存回收 JVM内存回收 根集 rootset 所谓根集就是正在执行的Java程序可以访问的引用变量的集合 包括局部变量 参数 类变量 程序可以使用引用变量访问对象的属性和调用对象的方法 垃圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的 从根集可达的对象都是活动对象 它们不能作为垃圾被回收 这也包括从根集间接可达的对象 而根集通过任意路径不可达的对象符合垃圾收集的条件 应该被回收 常用的算法 1 引用计数法 ReferenceCountingollector 2 tracing算法 TracingCollector 3 compacting算法 CompactingCollector 4 copying算法 CopingCollector 5 generation算法 GenerationalCollector 6 adaptive算法 AdaptiveCollector Sun的JVMGenerationalCollecting算法 Sun的JVMGenerationalCollecting 垃圾回收 原理是这样的 把对象分为年青代 Young 年老代 Tenured 持久代 Perm 对不同生命周期的对象使用不同的算法 基于对对象生命周期分析 1 Young 年轻代 年轻代分三个区 一个Eden区 两个Survivor区 大部分对象在Eden区中生成 当Eden区满时 还存活的对象将被复制到Survivor区 两个中的一个 当这个Survivor区满时 此区的存活对象将被复制到另外一个Survivor区 当这个Survivor去也满了的时候 从第一个Survivor区复制过来的并且此时还存活的对象 将被复制年老区 Tenured 需要注意 Survivor的两个区是对称的 没先后关系 所以同一个区中可能同时存在从Eden复制过来对象 和从前一个Survivor复制过来的对象 而复制到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育机构学生行为数据分析与应用研究
- 教育心理学在学生情绪调节中的应用研究
- 洛阳商业职业学院《数字视音频处理》2023-2024学年第二学期期末试卷
- 黑龙江建筑职业技术学院《病原生物与免疫学》2023-2024学年第二学期期末试卷
- 上饶卫生健康职业学院《语言综合训练》2023-2024学年第二学期期末试卷
- 新乡学院《大画幅摄影》2023-2024学年第二学期期末试卷
- 山东城市服务职业学院《道路工程概预算》2023-2024学年第二学期期末试卷
- 商业谈判中的礼仪与情绪控制
- 中央美术学院《风景园林制图》2023-2024学年第二学期期末试卷
- 云教育平台的伦理责任与实践探索
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)培训课件
- 深度学习的基本概念试题及答案
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- 国家开放大学《中国法律史》形考任务1-3答案
- “职业健康达人”竞赛考试题库500题(含答案)
- 手足口病培训课件(ppt)
- LD型单梁起重机使用说明书
- 测试案例附录DTX1800使用
- 实习生推荐信
- 关于德国能源转型的十二个见解
- 内蒙古自治区公路工程施工企业信用评价管理实施细则
评论
0/150
提交评论