当前位置:
文档之家› 深入理解java虚拟机培训ppt
深入理解java虚拟机培训ppt
(4) User-Defined ClassLoader 用户自定义类加载器 User-DefinedClassLoader是Java开发人员继承ClassLoader抽象类自行实现的ClassLoader ,基于自定义的ClassLoader可用于加载非Classpath中的jar以及目录
类加载器之类加载过程
Runtime Date Area 运行时数据区
这个组件就是JVM的内存区域,下面对这部分进行详细介绍。这是了解JVM内存模型的重要部分。
用户自定义加载器 User ClassLoader
用户自定义加载器 User ClassLoader
JVM体系结构之类加载器
站在JVM的角度讲,主要有两种类型加载器:启动类加载器和所有其它的类加载器。启动 类加载器是JVM实现的一部分,使用C++语言实现,其它类加载器都由java语言实现 ,独立 于虚拟机外部,并且全部继承抽象类ng.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
课程
深入理解JAVA虚拟机
2013-12-27 caizi12@
内容大纲
一、分享目标 • 分享的目标 二、Jvm基础知识及内存设置、监控 • • • • • Jvm相关概述 Jvm运行流程 Jvm体系架构 Jvm内存模型 JVM内存监控
三、Jvm垃圾回收机制及性能调优实战 • Jvm垃圾回收机制 • 如何提高Eclipse的运行效率
(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监控工具等 等
JVM体系结构
Execution Engine 执行引擎
执行引擎是JVM最核心的组成部分之一,其主要是执行class中的指令,任何JVM实现的核心是Execution engine 。执行引擎可以把JAVA字节码转为机器能识别的字节码,并调用机器的指令进行计算等, 不同JVM的执行效率很大程度决定于他们各自实现的Execution engine的好坏。 “虚拟机”的执行引擎与 “物理机”的执行引擎是比较类似的,这两种机器都有执行代码能力,其区别是物 理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现 的,因此虚拟机可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令。
类加载过程
加载 验证 准备
解析
初始化
使用
卸载
连接 1. 加载 加载过程负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名通 过ClassLoader来完成类的加载。 2. 连接 链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及 解析类中调用的接口、类。 (1)验证:确保被导入类的正确性 (2)准备:为类变量分配内存,并将其初始化为默认值 (3)解析:把类中的符号引用转换为直接引用 3.初始化 初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化, 在四种情况下初始化过程会被触发执行:调用了new;反射调用了类中的方法;子 类调用了初始化;JVM启动过程中指定的初始化类
除以上三个比较著名jvm外还有很多其它的JVM,例如: Azul VM、 Liquid VM、 Squawk VM 等。 Bea和Sun两家公司已分别于2008、2010被Oracle收购,未来oracle可能会整合hotSpot和Jrockit两个 虚拟机的精华做出更出色的JVM
2、 Jvm基础知识及内存设置、监控
所有线程共享的数据区
线程隔离的数据区
Runtime Data Area JVM运行时数据区 方法区 Method Area 虚拟机栈 VM Stack 本地方法栈 Native Method Stack
堆 Heap
程序计数器 Program Counter Register
执行引擎
Execution Engine
这是JVM的根ClassLoader,它是用C++实现的,JVM启动时初始化此ClassLoader, 并由此ClassLoader完成$JAVA_HOME$中jre\lib\rt.jar(Sun JDK的实现)中所有class文件的加载, 这个jar中包含了java规范定义的所有接口以及实现。启动类加载器无法被JAVA程序直接引用 。
等…
JVM的生命周期
(1)JVM实例的诞生
当启动一个JAVA程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点
(2)JVM实例的运行
main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部 有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由 JVM自己使用,JAVA程序也可以标明自己创建的线程是守护线程。
什么是JAVA虚拟机
JVM是JAVA虚拟机(JAVA Virtual Machine)的缩写,是一个虚构出 来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实 现的。JAVA虚拟机有自己完善的虚拟硬件架构,如处理器、堆栈、寄 存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相 关的信息,使得JAVA程序只需生成在JAVA虚拟机上运行的目标代码(字 节码),就可以在多种平台上不加修改地运行
JVM能运行哪些编程语言
JPython JRuby Groovy Cloiure JAVA
JVM
…… …
Scala Ceylon
JVM可以运行任何能编译成符合JVM 字节码规范的字节码。JAVA 和其他 JVM语言都是要经过编译成字节码之 后运行的。 一次编写,到处运行。经过多年的 发展JVM已经成为一个多元化的平台, 越来越多的语言可以运行在JVM上。
执行效率最优秀的JVM, 专注为服务器硬件和服 务端应用场景高度优化 的虚拟机,但启动慢, 占内存,通常使用于 Bea 的中间件产品 WebLogic上。
与HostSpot定位比较接近, 主要使用于IBM公司各种 JAVA产品的执行平台, 例如IBM WebSphere以及 在IBM AIX和z/OS这些平 台上部署的JAVA应用。
JVM运行流程
JAVA源程序
编译
JAVA字节码(.class文件)
通过本地或网络传输字节码
JAVA虚拟机
Windows下 的JAVA字节 码解释程序
本地机 器指令
Linux下的 JAVA字节码 解释程序
本地机 器指令
能直接解释 JAVA字节码 的CPU
本地机 器指令
Windows 操作系统
Linux 操作系统
本地库接口 Native Interface
本地方法库 Native Libraries
JVM体系结构之类加载器
Class Loader 类加载器
类加载器负责加载 JAVA 类的字节代码到 JAVA 虚拟机中,可以根据指定的类名(如 ng.Object) 来装载class文件的内容到 Runtime data area中的method area(方法区域)。JAVA程序员可以extends ng.ClassLoader类来写自己的Class loader。
JVM体系结构
JVM体系结构主要包含两个子系统和两个组件: Class Loader(类加载器)子系统,Execution Engine(执行引擎)子系统 Runtim Data Area(运行时数据区域) 组件,Native Interface(本地接口) 组件
Class Files
Class Loader 类加载器
Байду номын сангаас
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
JAVA Native Interface(JNI)本地接口
Java本地接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他 编程语言编写的代码相集成,例如可以调用Native语言函数C\C++等。JNI是java与其它编程语言交互 的接口。