深入理解java虚拟机培训ppt

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是JVM的根ClassLoader,它是用C++实现的,JVM启动时初始化此ClassLoader, 并由此ClassLoader完成$JAVA_HOME$中jre\lib\rt.jar(Sun JDK的实现)中所有class文件的加载, 这个jar中包含了java规范定义的所有接口以及实现。启动类加载器无法被JAVA程序直接引用 。
本地库接口 Native Interface
本地方法库 Native Libraries
JVM体系结构之类加载器
Class Loader 类加载器
类加载器负责加载 JAVA 类的字节代码到 JAVA 虚拟机中,可以根据指定的类名(如 java.lang.Object) 来装载class文件的内容到 Runtime data area中的method area(方法区域)。JAVA程序员可以extends java.lang.ClassLoader类来写自己的Class loader。
所有线程共享的数据区
线程隔离的数据区
Runtime Data Area JVM运行时数据区 方法区 Method Area 虚拟机栈 VM Stack 本地方法栈 Native Method Stack
堆 Heap
程序计数器 Program Counter Register
执行引擎
Execution Engine
类加载器双亲委派模型
启动类加载器 Bootstrap ClassLoader 扩展类加载器 Extension ClassLoader 应用程序类加载器 Application ClassLoader
双亲委派模型工作过程 如果一个类加载器接收到了类加载的请求,它首先把这个 请求委托给他的父类加载器去完成,每个层次的类加载器 都是如此,因此所有的加载请求都应该传送到顶层的启动 类加载器中,只有当父加载器反馈自己无法完成这个加载 请求(它在搜索范围中没有找到所需的类)时,子加载器 才会尝试自己去加载。 优点:java类随着它的类加载器一起具备了一种带有优先 级的层次关系。 例如类java.lang.Object,它存放在tools.jar中,无论哪 个类加载器要加载这个类,最终都会委派给启动类加载器 进行加载,因此Object类在程序的各种类加载器环境中都 是同一个类。相反,如果用户自己写了一个名为 java.lang.Object的类,并放在程序的Classpath中,那系 统中将会出现多个不同的Object类,java类型体系中最基 础的行为也无法保证,应用程序也会变得一片混乱。
执行效率最优秀的JVM, 专注为服务器硬件和服 务端应用场景高度优化 的虚拟机,但启动慢, 占内存,通常使用于 Bea 的中间件产品 WebLogic上。
与HostSpot定位比较接近, 主要使用于IBM公司各种 JAVA产品的执行平台, 例如IBM WebSphere以及 在IBM AIX和z/OS这些平 台上部署的JAVA应用。
等…
JVM的生命周期
(1)JVM实例的诞生
当启动一个JAVA程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点
(2)JVM实例的运行
main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部 有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由 JVM自己使用,JAVA程序也可以标明自己创建的线程是守护线程。
课程
深入理解JAVA虚拟机
2013-12-27 caizi12@126.com
内容大纲
一、分享目标 • 分享的目标 二、Jvm基础知识及内存设置、监控 • • • • • Jvm相关概述 Jvm运行流程 Jvm体系架构 Jvm内存模型 JVM内存监控
三、Jvm垃圾回收机制及性能调优实战 • Jvm垃圾回收机制 • 如何提高Eclipse的运行效率
Runtime Date Area 运行时数据区
这个组件就是JVM的内存区域,下面对这部分进行详细介绍。这是了解JVM内存模型的重要部分。
JAVA Native Interface(JNI)本地接口
Java本地接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他 编程语言编写的代码相集成,例如可以调用Native语言函数C\C++等。JNI是java与其它编程语言交互 的接口。
用户自定义加载器 User ClassLoader
用户自定义加载器 User ClassLoader
JVM体系结构之类加载器
站在JVM的角度讲,主要有两种类型加载器:启动类加载器和所有其它的类加载器。启动 类加载器是JVM实现的一部分,使用C++语言实现,其它类加载器都由java语言实现 ,独立 于虚拟机外部,并且全部继承抽象类java.lang.ClassLoader (1) Bootstrap ClassLoader 启动类加载器
2.1、JVM相关概念 1、什么是JVM 2、JVM能运行哪些编程语言 3、JVM运行流程 4、JVM生命周期 5、三大流行的JVM 2.2、JVM体系结构 1、类加载器 2、执行引擎 3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile
类加载过程
加载 验证 准备
解析
初始化
使用
卸载
连接 1. 加载 加载过程负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名通 过ClassLoader来完成类的加载。 2. 连接 链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及 解析类中调用的接口、类。 (1)验证:确保被导入类的正确性 (2)准备:为类变量分配内存,并将其初始化为默认值 (3)解析:把类中的符号引用转换为直接引用 3.初始化 初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化, 在四种情况下初始化过程会被触发执行:调用了new;反射调用了类中的方法;子 类调用了初始化;JVM启动过程中指定的初始化类
JVM运行流程
JAVA源程序
编译
JAVA字节码(.class文件)
通过本地或网络传输字节码
JAVA虚拟机
Windows下 的JAVA字节 码解释程序
本地机 器指令
Linux下的 JAVA字节码 解释程序
Байду номын сангаас本地机 器指令
能直接解释 JAVA字节码 的CPU
本地机 器指令
Windows 操作系统
Linux 操作系统
什么是JAVA虚拟机
JVM是JAVA虚拟机(JAVA Virtual Machine)的缩写,是一个虚构出 来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实 现的。JAVA虚拟机有自己完善的虚拟硬件架构,如处理器、堆栈、寄 存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相 关的信息,使得JAVA程序只需生成在JAVA虚拟机上运行的目标代码(字 节码),就可以在多种平台上不加修改地运行
JVM体系结构
JVM体系结构主要包含两个子系统和两个组件: Class Loader(类加载器)子系统,Execution Engine(执行引擎)子系统 Runtim Data Area(运行时数据区域) 组件,Native Interface(本地接口) 组件
Class Files
Class Loader 类加载器
(3)JVM实例的消亡
当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使 用Runtime类或者System.exit()来退出。
JVM、JRE 、 JDK的区别
JVM :JAVA虚拟机 所有的JAVA程序都是运行在JVM上,JVM是JRE的一部分 JRE : JAVA Runtime Environment(JAVA运行环境) JRE主要用于执行JAVA程序,JRE除了包含JVM外还包含一些基础的JAVA API, JRE是JDK的一部份。 JDK: JAVA Development Kit(JAVA开发工具包) JDK提供了JAVA的开发环境和运行环境(JRE),开发环境主要包含了一些开发 工具,例如常用的JAVAc编译工具、jar打包执行程序、还有一些JVM监控工具等 等
JAVA的各种集成开发工具Eclipse、NetBean、IntelliJ IDEA等
JDK开发工具包JAVAc、jar等
JRE运行环境 JVM OS操作系统
三大流行JVM
Sun HotSpot Bea JRockit IBM J9
使用最广泛的jvm,兼 容性好,开源,无论使 用于客户端或者服务端 都有较好的性能,综合 性能比较优秀
JVM能运行哪些编程语言
JPython JRuby Groovy Cloiure JAVA
JVM
…… …
Scala Ceylon
JVM可以运行任何能编译成符合JVM 字节码规范的字节码。JAVA 和其他 JVM语言都是要经过编译成字节码之 后运行的。 一次编写,到处运行。经过多年的 发展JVM已经成为一个多元化的平台, 越来越多的语言可以运行在JVM上。
(2) Extension ClassLoader 扩展类加载器
扩展类加载器负责加载<JAVA_HOME>\lib\ext目录中或者java.ext.dirs系统变量所指定的所有类库, 开发者可以直接使用扩展类加载器。
(3)Application ClassLoader 应用程序类加载器
JVM用此classloader来加载用户类路径 (Classpath)上所指定的类库,包含指定的jar包以及目录, 该加载器有时也称为系统类加载器。开发者可以直接使用这个类加载器,如果应用程序中没有自定义过 自己的类加载器,一般情况下这个就是程序中默认的类加载器。
(4) User-Defined ClassLoader 用户自定义类加载器 User-DefinedClassLoader是Java开发人员继承ClassLoader抽象类自行实现的ClassLoader ,基于自定义的ClassLoader可用于加载非Classpath中的jar以及目录
类加载器之类加载过程
JVM体系结构
Execution Engine 执行引擎
执行引擎是JVM最核心的组成部分之一,其主要是执行class中的指令,任何JVM实现的核心是Execution engine 。执行引擎可以把JAVA字节码转为机器能识别的字节码,并调用机器的指令进行计算等, 不同JVM的执行效率很大程度决定于他们各自实现的Execution engine的好坏。 “虚拟机”的执行引擎与 “物理机”的执行引擎是比较类似的,这两种机器都有执行代码能力,其区别是物 理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现 的,因此虚拟机可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令。
除以上三个比较著名jvm外还有很多其它的JVM,例如: Azul VM、 Liquid VM、 Squawk VM 等。 Bea和Sun两家公司已分别于2008、2010被Oracle收购,未来oracle可能会整合hotSpot和Jrockit两个 虚拟机的精华做出更出色的JVM
2、 Jvm基础知识及内存设置、监控
1、分享目标
能更深入的认识JAVA及JAVA虚拟机
了解JAVA虚拟机的体系结构及垃圾回收机制
了解JAVA虚拟机监控工具,可以进行简单的性能调优
一起学习,共同成长 …….
2、 Jvm基础知识及内存设置、监控
2.1、JVM相关概念 1、什么是JVM 2、JVM能运行哪些编程语言 3、JVM运行流程 4、JVM生命周期 5、三大流行的JVM 2.2、JVM体系结构 1、类加载器 2、执行引擎 3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile
相关文档
最新文档