JVM工作原理.ppt
JVM工作原理
JVM工作原理JVM(Java虚拟机)是Java程序的运行环境,它负责将Java源代码编译成可执行的字节码,并提供运行时环境来执行字节码。
JVM的工作原理涉及到类加载、内存管理、垃圾回收、即时编译等多个方面。
1. 类加载JVM通过类加载器(ClassLoader)来加载Java类。
类加载器根据类的全限定名(包括包名和类名)在类路径中查找对应的字节码文件,并将其加载到内存中。
类加载器采用双亲委派模型,即先由父类加载器尝试加载类,如果父类加载器无法加载,则由子类加载器尝试加载。
这种模型保证了类的唯一性和安全性。
2. 内存管理JVM将内存分为多个区域,包括方法区、堆、栈和程序计数器。
方法区存储类的元数据信息,如字段、方法、常量池等。
堆是存放对象实例的区域,通过垃圾回收机制来管理内存的分配和释放。
栈用于存储方法的局部变量和方法调用信息。
程序计数器用于指示当前线程执行的字节码指令。
3. 垃圾回收JVM通过垃圾回收机制自动回收不再使用的对象内存。
垃圾回收器会定期扫描堆内存,标记所有还在使用的对象,然后清理掉未被标记的对象。
常见的垃圾回收算法有标记-清除、复制、标记-整理等。
JVM还提供了不同的垃圾回收器,如Serial、Parallel、CMS、G1等,可以根据应用场景选择合适的垃圾回收器。
4. 即时编译JVM使用即时编译器(Just-In-Time Compiler)将热点代码(经常被执行的代码)编译成本地机器码,以提高执行效率。
JVM会监测程序的运行情况,根据热点代码的执行频率和调用关系进行优化编译。
即时编译器可以选择不同的编译策略,如解释执行、编译执行或混合执行。
5. 内存模型JVM定义了Java程序在多线程环境下的内存模型,保证多线程的内存可见性和有序性。
内存模型规定了线程之间如何进行通信和同步。
JVM使用主内存和工作内存的概念,线程之间的共享变量存储在主内存中,每个线程有自己的工作内存,线程对共享变量的操作先在工作内存中进行,然后通过主内存来同步和通信。
JVM工作原理
JVM工作原理JVM(Java虚拟机)是Java程序运行的核心组件,它负责将Java源代码编译成可执行的字节码,并提供了一系列的运行时环境和功能。
了解JVM的工作原理对于开发高效、稳定的Java应用程序至关重要。
本文将详细介绍JVM的工作原理,包括字节码执行过程、内存管理、垃圾回收机制等。
1. 字节码执行过程:JVM通过解释器和即时编译器(JIT)两种方式执行字节码。
解释器逐条解释字节码指令并执行,而JIT则将热点代码编译成本地机器码以提高执行效率。
JVM会根据代码的热度来决定是否使用JIT编译器。
2. 内存管理:JVM将内存分为不同的区域,包括堆、栈、方法区等。
堆用于存储对象实例,栈用于存储方法调用和局部变量,方法区用于存储类信息和静态变量。
JVM会动态地分配和回收内存,以满足程序的需求。
3. 垃圾回收机制:JVM通过垃圾回收机制自动管理内存,减少程序员手动释放内存的工作量。
垃圾回收器会定期扫描内存中的对象,标记出不再使用的对象,并将其回收。
常见的垃圾回收算法包括标记-清除、复制、标记-整理等。
4. 类加载机制:JVM使用类加载器(ClassLoader)加载字节码文件并生成对应的类对象。
类加载器按照特定的顺序逐级加载类,包括启动类加载器、扩展类加载器和应用程序类加载器。
加载过程包括加载、连接和初始化三个阶段。
5. JIT编译器:JIT编译器是JVM的一个重要组成部分,它将热点代码(被频繁执行的代码)编译成本地机器码,以提高执行效率。
JIT编译器使用即时编译技术,根据程序的运行情况来动态地进行编译。
6. 异常处理:JVM提供了异常处理机制,用于捕获和处理程序运行过程中的异常情况。
当程序抛出异常时,JVM会查找合适的异常处理器来处理异常,如果找不到则终止程序的执行。
7. 多线程支持:JVM支持多线程并发执行,通过线程调度器来协调线程之间的执行顺序。
JVM为每个线程分配独立的栈空间,以保证线程之间的数据隔离。
java虚拟机的工作原理
java虚拟机的工作原理Java虚拟机(JVM)是Java程序运行的环境,它负责解释和执行Java字节码。
JVM的工作原理可以分为三个主要的部分:类加载、字节码执行和垃圾回收。
1.类加载:JVM通过类加载器将Java字节码加载到内存中。
类加载器根据类路径在文件系统或网络中查找并读取字节码文件,然后将其转化为JVM运行时数据结构,如类和方法的元数据。
加载完成后,JVM会在方法区中存储类的元数据,并在堆中分配内存来存储类的实例。
2.字节码执行:3.垃圾回收:JVM提供垃圾回收机制来自动释放不再使用的内存。
JVM会跟踪每个对象的引用,当一个对象没有引用时,即被视为垃圾。
垃圾回收器定期执行垃圾收集操作,释放垃圾对象占用的内存。
垃圾回收器有不同的实现策略,如标记-清除、引用计数、复制、标记-整理等。
除了以上三个主要的部分,JVM还包含其他组件,如堆内存、栈、方法区等。
堆内存用于存储对象实例,栈用于存储局部变量和方法调用参数,方法区用于存储类的元数据和静态数据。
JVM的工作过程如下:1. 通过类加载器加载Java字节码。
2.解释执行或JIT编译字节码。
3.根据需要进行垃圾回收和内存管理。
4.执行程序。
JVM的优点是跨平台性、自动内存管理和高性能。
通过JVM,Java程序可以在不同的硬件和操作系统上运行,无需修改源代码。
JVM的自动内存管理功能减轻了开发人员对内存管理的负担,避免了内存泄漏和越界访问等错误。
JVM的即时编译技术能够将热点代码优化为本地机器代码,提高程序的执行效率。
在实际的Java应用开发中,了解JVM的工作原理有助于编写高效的代码和解决性能问题。
开发人员可以通过调整JVM参数、选择合适的垃圾回收器和内存分配策略来优化程序的性能。
同时,了解JVM的工作原理还有助于理解虚拟机层面的问题和调优技巧,提升应用的可靠性和稳定性。
jvm原理
JVM 原理解释JVM 全称是 Java Virtual Machine ,Java 虚拟机,这个 JVM 你是看不到的,它存在内存中。
我们知道计算机的基本构成是:运算器、控制器、存储器、输入和输出设备,那这个 JVM 也是有这成套的元素,运算器是当然是交给硬件 CPU 还处理了,只是为了适应“一次编译,随处运行”的情况,需要做一个翻译动作,于是就用了JVM 自己的命令集,JVM 的命令集则是可以到处运行的,因为 JVM 做了翻译,根据不同的CPU ,翻译成不同的机器语言。
JVM 是一个内存中的虚拟机,那它的存储就是内存了,我们写的所有类、常量、变量、方法都在内存中。
JVM 的组成部分Class Loader 类加载器类加载器的作用是加载类文件(.class)到内存,Class Loader 加载的 class 文件是有格式要求的。
类加载的最终产品是位于运行时数据区的堆区的Class对象。
Class对象封装了类在方法区内部的数据结构。
并且向JAVA程序提供了访问类在方法区内的数据结构。
JVM加载class文件的原理机制1. Java 中的所有类,必须被装载到 JMV 中才能运行,这个装载工作是由 JVM 中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中。
2. Java中的类大致分为三种:a) 系统类b) 扩展类c) 由程序员自定义的类3. 类装载方式,有两种:a) 隐式装载,程序在运行过程中当碰到通过 new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
b) 显式装载,通过 class.forname() 等方法,显式加载需要的类。
4. 类加载的动态性体现一个应用程序总是由n多个类组成,Java 程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到 JVM 中,其它类等到 JVM 用到的时候再加载,这样的好处是节省了内存的开销。
JAVA虚拟机JVM介绍ppt课件
Java 虚拟机栈和本地方法栈 — Java 虚拟机栈的概念和特征
Java 虚拟机栈的特征
• 线程私有 • 后进先出(LIFO)栈 • 存储栈帧,支撑 Java 方法的调用、执行和退出 • 可能出现 OutOfMemoryError 异常和 StackOverflowError 异常
Java 虚拟机栈和本地方法栈 — 本地方法栈的概念和特征
JVM
汇报人:陈琦帆
汇报人:陈琦帆
JVM 简介— 目录
• Java 虚拟机和 Java 内存区域概述 • Java 虚拟机栈和本地方法栈 • Java 堆 • 方法区和运行时常量池
Java 虚拟机和 Java 内存区域概述
• 什么是虚拟机,什么是 Java 虚拟机 • Java 虚拟机基础架构 • Java 虚拟机运行时数据区 • 程序计数器区域
和对象的引用
Java 虚拟机和内存区域概述 — 栈帧概念和特征
操作数栈的概念和特征
• 是一个后进先出栈,由若干个 Entry 组成,长度由编译期决定 • 单个 Entry 即可以存储一个 Java 虚拟机中定义的任意数据类型的值,包括
long和 double 类型,但是存储 long 和 double 类型的 Entrya 虚拟机和内存区域概述 — 栈帧概念和特征
栈帧的概念和特征
• Java 虚拟机栈中存储的内容,它被用于存储数据和部分过程结果的数据结构,
同时也被用来处理动态链接、方法返回值和异常分派
• 一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成
和异常完成信息
Java 虚拟机和内存区域概述 — 栈帧概念和特征
• 在方法执行过程中,栈帧用于存储计算参数和计算结果;在方法调用时,操作
jvm的工作原理
jvm的工作原理
JVM(Java虚拟机)是一种运行Java字节码的虚拟机,它是Java 语言的核心组成部分。
JVM的主要工作是将Java代码编译成字节码并在运行时执行这些字节码。
JVM的工作流程如下:
1. 读取字节码:JVM读取字节码文件并将其加载到内存中。
2. 类加载:JVM将字节码文件转换为Java类,并进行类的验证、准备和解析。
3. 内存分配:JVM为Java类分配内存空间,并将其属性和方法加载到内存中。
4. 字节码执行:JVM执行Java字节码,通过解释器或即时编译器将字节码转换为机器码,并在CPU上运行。
5. 垃圾回收:JVM负责管理Java对象的内存分配和释放,使用垃圾回收算法来自动回收不再使用的对象。
JVM的工作原理是基于Java语言的跨平台特性,它将Java代码转换为字节码,使得Java程序可以在不同的操作系统和硬件上运行。
同时,JVM的垃圾回收机制可以有效地管理内存,避免了内存泄漏和越界访问等问题,提高了Java程序的稳定性和安全性。
- 1 -。
JVM工作原理
JVM工作原理标题:JVM工作原理引言概述:Java虚拟机(JVM)是Java程序运行的核心组件,它负责将Java 源代码编译成字节码并在特定平台上运行。
了解JVM的工作原理对于开发人员来说至关重要,因为它影响着程序的性能和稳定性。
一、类加载器(ClassLoader)1.1 类加载器的作用是将编译后的字节码文件加载到内存中。
1.2 JVM中有三种类加载器:启动类加载器、扩展类加载器和应用程序类加载器。
1.3 类加载器采用双亲委派模型,即先由父类加载器尝试加载类,如果父类加载器无法加载,则由子类加载器加载。
二、运行时数据区(Runtime Data Area)2.1 运行时数据区包括方法区、堆、栈、程序计数器和本地方法栈。
2.2 方法区存储类的结构信息、静态变量、常量等。
2.3 堆用于存储对象实例,是Java内存管理的核心区域。
三、执行引擎(Execution Engine)3.1 执行引擎负责执行字节码指令。
3.2 JVM有两种执行引擎:解释器和即时编译器。
3.3 解释器逐条解释字节码指令执行,即时编译器将热点代码编译成本地机器码执行。
四、垃圾回收器(Garbage Collector)4.1 垃圾回收器负责回收不再使用的对象,释放内存空间。
4.2 JVM中有多种垃圾回收算法,如标记-清除算法、复制算法、标记-整理算法等。
4.3 垃圾回收器的性能直接影响程序的运行效率和响应速度。
五、本地方法接口(Native Interface)5.1 本地方法接口允许Java程序调用本地方法实现与操作系统交互。
5.2 本地方法接口提供了Java和本地代码之间的桥梁。
5.3 本地方法接口的使用需要谨慎,因为调用本地方法可能导致程序的不稳定性和安全性问题。
结论:JVM作为Java程序的核心组件,其工作原理涉及类加载器、运行时数据区、执行引擎、垃圾回收器和本地方法接口等多个方面。
了解JVM的工作原理有助于开发人员编写高效、稳定的Java应用程序。
JVM工作原理
JVM工作原理JVM(Java虚拟机)是Java程序的运行环境,它负责将Java字节码转换为机器码并执行。
了解JVM的工作原理对于Java开辟者来说非常重要,因为它涉及到Java程序的性能、内存管理和安全性等方面。
本文将详细介绍JVM的工作原理,包括类加载、内存管理、垃圾回收和即时编译等方面的内容。
一、类加载类加载是JVM将Java字节码加载到内存中并解析的过程。
当Java程序启动时,JVM会通过类加载器加载所需的类。
类加载器按照一定的顺序从不同的位置加载类文件,包括本地文件系统、网络等。
一旦类加载完成,JVM会将类的信息存储在方法区中,包括类的结构、字段、方法等。
二、内存管理JVM的内存管理主要包括堆、栈、方法区和程序计数器。
堆是Java程序运行时创建的对象所存储的区域,它是所有线程共享的。
栈是每一个线程独有的,用于存储方法调用和局部变量。
方法区用于存储类的信息,包括静态变量、常量池等。
程序计数器用于记录当前线程执行的字节码指令地址。
三、垃圾回收垃圾回收是JVM自动管理内存的过程。
当对象再也不被引用时,垃圾回收器会自动回收其所占用的内存。
JVM使用不同的垃圾回收算法来进行内存回收,包括标记-清除、复制、标记-整理等。
垃圾回收的过程会导致一定的停顿时间,因此需要合理配置垃圾回收器的参数以提高程序的性能。
四、即时编译即时编译是JVM将字节码转换为机器码的过程。
JVM使用解释器执行字节码,但解释器的执行效率较低。
为了提高程序的性能,JVM会将热点代码(被频繁执行的代码)进行即时编译,将其转换为机器码执行。
即时编译器使用不同的优化技术来提高代码的执行效率,包括方法内联、逃逸分析等。
五、性能调优了解JVM的工作原理对于性能调优非常重要。
通过调整JVM的参数,可以优化内存管理、垃圾回收和即时编译等方面的性能。
例如,可以调整堆的大小、选择合适的垃圾回收器、设置合理的垃圾回收参数等。
此外,还可以使用工具来监控JVM的运行状态,包括内存使用、垃圾回收频率等,以便及时发现和解决性能问题。
JVM基础知识及性能调优PPT参考幻灯片
N,Age+1
2020/3/30
13
永久代(持久代)内存
➢永久代内存用于保存类信息。方法区的大小决定了系统可以保存 多少个类;
➢如果定义了太多的类,会导致永久代内存溢出,参考代码示例 PermTest ;
➢在JDK1.8中,废弃永久代,取而代之的是元数据区(Metaspace) ;
2020/3/30
比较大;
2020/3/30
42
Serial Old 收集器
➢Serial Old是Serial 收集器的老年代版本;
➢Serial Old 同样是单线程收集器,使用“标记压缩”算法;
➢它是虚拟机运行在Client模式下的默认新生代收集器;
2020/3/30
43
Serial/ Serial Old收集器运行示意图
2020/3/30
27
VisualVM介绍
2020/3/30
28
运用VisualVM调优
➢运用VisualVM的快照查看耗时方法的具体时间及调用次数、CPU、 内存占用情况,分析问题,解决问题;
➢参考示例: CpuTest和历史邮件;
2020/3/30
29
JVM基础知识及性能调优
JVM基本结构 JVM的重要概念、相关参数、日志 JVM工具 垃圾回收算法、垃圾收集器
➢内存分析工具MAT
➢图形化虚拟机监控工具Jconsole
2020/3/30
26
VisualVM介绍
➢VisualVM官网
➢Java VisualVM默认没有安装Visual GC插件,需要手动安装,JDK的 安装目录的bin目录下双击jvisualvm.exe
垃圾回收算法
JVM工作原理
JVM工作原理JVM(Java Virtual Machine)是Java虚拟机的缩写,是Java程序运行的基础。
它是一个抽象的计算机,通过解释和执行Java字节码来实现Java程序的运行。
JVM的工作原理涉及到类加载、字节码解释和执行、垃圾回收等多个方面。
1. 类加载在JVM中,类的加载是指将类的字节码文件加载到内存中,并对其进行校验、准备和解析的过程。
类加载器负责将类文件加载到内存,并生成对应的Class对象。
JVM内置了三个类加载器:启动类加载器、扩展类加载器和应用程序类加载器。
启动类加载器负责加载核心类库,扩展类加载器负责加载Java的扩展类库,应用程序类加载器负责加载应用程序的类。
2. 字节码解释和执行在类加载完成后,JVM会将类的字节码文件解释成机器码,并按照一定的顺序执行。
字节码解释和执行是JVM的核心功能之一。
JVM采用解释执行的方式,通过解释器逐行解释字节码并执行相应的操作。
这种方式的好处是跨平台,但执行效率相对较低。
3. 即时编译为了提高执行效率,JVM还引入了即时编译(Just-In-Time Compilation,JIT)技术。
即时编译器可以将热点代码(被频繁执行的代码)编译成本地机器码,以提高执行速度。
JIT编译器会监测程序的执行情况,当发现某段代码被频繁执行时,就会将其编译成机器码,并替换原来的解释执行代码。
4. 内存管理和垃圾回收JVM负责管理程序运行时的内存,包括堆内存和栈内存。
堆内存用于存储对象实例,栈内存用于存储方法调用和局部变量等。
JVM通过垃圾回收机制来自动管理内存的分配和释放。
垃圾回收器会定期扫描堆内存,标记并清理不再使用的对象,释放内存空间。
5. 运行时数据区域JVM将内存划分为不同的运行时数据区域,包括方法区、堆、栈、程序计数器和本地方法栈等。
方法区用于存储类的结构信息、常量池等。
堆用于存储对象实例。
栈用于存储方法的调用和局部变量等。
程序计数器用于记录当前线程执行的字节码指令地址。
JVM工作原理
JVM工作原理JVM(Java Virtual Machine)是Java编程语言的核心组件,它是一个虚拟机,负责将Java字节码转换为机器码并执行程序。
JVM的工作原理是Java程序能够跨平台运行的关键所在。
本文将从JVM的工作原理出发,详细介绍JVM是如何工作的。
一、类加载器1.1 类加载器的作用类加载器负责加载Java类文件,并将其转换为JVM能够识别的数据结构。
1.2 类加载器的分类JVM中的类加载器分为三种:启动类加载器、扩展类加载器和应用程序类加载器。
1.3 类加载器的双亲委派模型类加载器采用双亲委派模型,即父类加载器会委托子类加载器加载类,确保类的唯一性和安全性。
二、解释器与即时编译器2.1 解释器的作用解释器负责将Java字节码逐行翻译为机器码并执行程序。
2.2 即时编译器的作用即时编译器将热点代码(频繁执行的代码)编译为本地代码,提高程序的执行效率。
2.3 解释器与即时编译器的协同工作解释器和即时编译器相互配合,根据程序的执行情况选择合适的编译方式,实现性能的最大化。
三、运行时数据区域3.1 程序计数器程序计数器存储当前线程执行的字节码指令地址。
3.2 Java虚拟机栈Java虚拟机栈存储方法的局部变量表、操作数栈、动态链接和方法出口等信息。
3.3 本地方法栈本地方法栈用于执行本地方法(Native Method)。
四、垃圾回收器4.1 垃圾回收的概念垃圾回收器负责回收不再使用的对象,释放内存空间。
4.2 垃圾回收算法常见的垃圾回收算法包括标记-清除算法、复制算法、标记-整理算法等。
4.3 垃圾回收器的种类JVM中有多种垃圾回收器,如Serial收集器、Parallel收集器、CMS收集器、G1收集器等,各有不同的特点和适用场景。
五、内存模型5.1 堆堆是JVM中最大的一块内存区域,用于存储对象实例。
5.2 方法区方法区存储类的结构信息、静态变量、常量池等数据。
5.3 运行时常量池运行时常量池存储编译期生成的字面量和符号引用。
《Java高级课件之JVM详解》
堆
掌握堆内存的分配和回收机制。方法区深入了解方法区的内部结构和 特性。
PC寄存器
了解PC寄存器的作用和使用场 景。
JVM垃圾回收机制
介绍JVM的垃圾回收机制,包括垃圾回收算法、垃圾回收器种类和调优技巧。有效提高程序的内存利用 率和性能。
垃圾回收概述
了解垃圾回收的基本概念和作用。
垃圾回收算法
掌握标记-清除算法、标记-复制算法、标记整理算法等。
总结
回顾JVM的重要概念和原理,总结学习到的知识和关键点。
垃圾回收器
研究不同类型的垃圾回收器,如串行、并行 和CMS等。
垃圾回收调优
优化垃圾回收机制以提高程序的性能。
JVM性能优化
通过深入理解JVM的运行机制,掌握性能优化的方法和技巧。提高程序的响应速度和吞吐量。
1
JIT编译器
了解JIT编译器的作用和原理。
调优工具
2
使用JVM性能分析工具进行性能调优。
3
1
字节码概述
了解Java字节码的基本概念和作用。
字节码结构
2
深入研究字节码的组成和格式,理解
字节码指令的含义。
3
字节码工具
使用字节码工具分析和调试Java代码。
JVM运行时数据区域
了解JVM运行时数据区域的不同部分,包括方法区,堆,栈和PC寄存器。从内存管理和优化的角度来深 入研究。
栈
认识栈的作用和结构,理解栈 帧和方法调用过程。
Java高级课件之JVM详解
深入剖析Java虚拟机(JVM)的运行原理,包括JVM简介与作用,Java字节 码,JVM运行时数据区域,JVM垃圾回收机制,JVM性能优化和JVM调优工 具等。
Java字节码
JVM工作原理
J V M工作原理-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除J V M工作原理(总4页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除JVM工作原理1.JVM是什么2.为java程序提供运行环境,将java字节码文件翻译成机器可执行的二进制程序。
2. JVM装入:操作系统通过jdk中的java.exe来装入JVM①、创建JVM装载环境和配置②、装载JVM.dll③、初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例④、调用JNIEnv实例装载并处理class类3. JVM装入环境,JVM提供的方式是操作系统的动态连接文件基于Windows的实现的分析①、查找jre路径Java是通过GetApplicationHome api来获得当前的Java.exe绝对路径②、查找JVM.dllF:\Java\jdk1.6.0_20\jre\bin\java.dll或GetPublicJREHomeHKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment③、装载JVM.cfg文件F:\Java\jdk1.6.0_20\jre\lib\i386\JVM.cfgjdk目录中jre\bin\server和jre\bin\client都有JVM.dll文件存在,而Java正是通过JVM.cfg配置文件来管理这些不同版本的JVM.dll的主要参数:-client KNOWN-server KNOWN-hotspot ALIASED_TO -client-classic WARN-native ERROR-green ERRORKNOWN表示JVM存在ALIASED_TO表示给别的JVM取一个别名WARN表示不存在时找一个JVM替代ERROR表示不存在抛出异常在运行Java XXX是,Java.exe会通过CheckJVMType来检查当前的JVM 类型,Java可以通过两种参数的方式来指定具体的JVM类型,一种按照JVM.cfg文件中的JVM名称指定,第二种方法是直接指定:①、Java –J②、Java -XXaltJVM= 或 Java -J-XXaltJVM=如果是第一种参数传递方式,CheckJVMType函数会取参数‘-J’后面的JVM名称,然后从已知的JVM配置参数中查找如果找到同名的则去掉该JVM名称前的‘-’直接返回该值;而第二种方法,会直接返回“-XXaltJVM=”或“-J-XXaltJVM=”后面的JVM类型名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接 口、类。 在完成了校验后,JVM初始化类中的静态变量,并将其值赋为默认值。 最后一步为对类中的所有属性、方法进行验证,以确保其需要调用的属性、方法存在,以及具备应 的权限(例如public、private域权限等),会造成NoSuchMethodError、NoSuchFieldError等错误 信息。
(3)初始化
初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化,在四种情况下初 始化过程会被触发执行: 调用了new;反射调用了类中的方法;子类调用了初始化;JVM启动过程中指定的初始化类。
பைடு நூலகம்
JVM的体系结构之类加载器
JVM的体系结构之类加载器
一、JVM两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装 载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是 ClassLoader类的子类。 二、 主要分为以下几类:
内容
JVM的生命周期 JVM的体系结构 JVM类加载器 JVM执行引擎 JVM运行时数据区 JVM垃圾回收 问题
JVM的体系结构
JVM的体系结构
一、 JVM的内部体系结构分为三部分, (1)类装载器(ClassLoader)子系统 作用: 用来装载.class文件
(2)执行引擎 作用:执行字节码,或者执行本地方法
(3)运行时数据区 方法区,堆,java栈,PC寄存器,本地方法栈
内容
JVM的生命周期 JVM的体系结构 JVM类加载器 JVM执行引擎 JVM运行时数据区 JVM垃圾回收 问题
JVM的体系结构之类加载器
一、 JVM将整个类加载过程划分为了三个步骤: (1)装载
装载过程负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名通过ClassLoader 来完成类的加载,同样,也采用以上三个元素来标识一个被加载了的类:类名+包名+ClassLoader 实例ID。
(2) Extension ClassLoader JVM用此classloader来加载扩展功能的一些jar包
(3) System ClassLoader JVM用此classloader来加载启动参数中指定的Classpath中的jar包以及目录,在Sun JDK中 ClassLoader对应的类名为AppClassLoader。
一、首先分析两个概念
JVM的生命周期
JVM实例和JVM执行引擎实例 (1)JVM实例对应了一个独立运行的java程序
它是进程级别
(2)JVM执行引擎实例则对应了属于用户运行程序的线程 它是线程级别的
JVM的生命周期
二、JVM的生命周期 (1)JVM实例的诞生 当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点
(5)defineClass 此方法负责将二进制的字节码转换为Class对象
(6) resolveClass 此方法负责完成Class对象的链接,如已链接过,则会直接返回。
JVM的体系结构之类加载器
四、简单的classLoader例子
• /*
•
* 重写ClassLoader类的findClass方法,将一个字节数组转换为 Class 类的实例
淘宝技术大学 应届生培训
JVM工作原理
课程组:雷卷 小邪 九穆
版本:第一版2009年
达到的目标
知道Java虚拟机的生存周期 知道JVM的体系结构 知道JVM体系结构中的各个部分 能对JVM有个大致清晰的了解
内容
JVM的生命周期 JVM的体系结构 JVM类加载器 JVM执行引擎 JVM运行时数据区 JVM垃圾回收 问题
三、ClassLoader抽象类提供了几个关键的方法:
(1)loadClass 此方法负责加载指定名字的类,ClassLoader的实现方法为先从已经加载的类中寻找,如没有则继 续从parent ClassLoader中寻找,如仍然没找到,则从System ClassLoader中寻找,最后再调用 findClass方法来寻找,如要改变类的加载顺序,则可覆盖此方法
(1) Bootstrap ClassLoader 这是JVM的根ClassLoader,它是用C++实现的,JVM启动时初始化此ClassLoader,并由此 ClassLoader完成$JAVA_HOME中jre/lib/rt.jar(Sun JDK的实现)中所有class文件的加载,这个jar 中包含了java规范定义的所有接口以及实现。
(2)JVM实例的运行 main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM
内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线 程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程。
(3)JVM实例的消亡 当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程 序也可以使用Runtime类或者System.exit()来退出。
(2)findLoadedClass 此方法负责从当前ClassLoader实例对象的缓存中寻找已加载的类,调用的为native的方法。
(3) findClass 此方法直接抛出ClassNotFoundException,因此需要通过覆盖loadClass或此方法来以自定义的方式 加载相应的类。
(4) findSystemClass 此方法负责从System ClassLoader中寻找类,如未找到,则继续从Bootstrap ClassLoader中寻找, 如仍然为找到,则返回null。
(4) User-Defined ClassLoader User-DefinedClassLoader是Java开发人员继承ClassLoader抽象类自行实现的ClassLoader,基于 自定义的ClassLoader可用于加载非Classpath中的jar以及目录
JVM的体系结构之类加载器