《JAVA虚拟机JVM介绍.ppt》由会员分享,可在线阅读,更多相关《JAVA虚拟机JVM介绍.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇报人:陈琦帆 JVM汇报人:陈琦帆JVM简介目录Java虚拟机和Java内存区域概述Java虚拟机栈和本地方法栈Java堆方法区和运行时常量池Java虚拟机和Java内存区域概述什么是虚拟机,什么是Java虚拟机Java虚拟机基础架构Java虚拟机运行时数据区程序计数器区域Java虚拟机和Java内存区域概述什么是虚拟机,什么是Java虚拟机虚拟机定义:模拟某种计算机体系结构,执行特定指令集的软件系统虚拟机(VirtualBox、VMware),进程虚拟机进程虚拟机JVM、AdobeFlashPlayer、FC模拟器高级语言虚拟机JVM、.NETCLR、P-CodeJava虚拟机和Java内
2、存区域概述什么是虚拟机,什么是Java虚拟机Java语言虚拟机可以执行Java语言的高级语言虚拟机。Java语言虚拟机并不一定就可以称为JVM,譬如:ApacheHarmonyJava虚拟机必须通过JavaTCK(TechnologyCompatibilityKit)的兼容性测试的Java语言虚拟机才能称为“Java虚拟机”Java虚拟机并非一定要执行“Java”程序业界三大商用JVM:OracleHotSpot、OracleJRockitVM、IBMJ9VMJava虚拟机和Java内存区域概述JAVA虚拟机架构该图参考了网上广为流传的JVM构成图,大家看这个图,整个JVM分为四部分:Clas
3、sLoader类加载器ExecutionEngine执行引擎NativeInterface本地接口Runtimedataarea运行数据区Java虚拟机和内存区域概述Java虚拟机运行时数据区运行时数据区的划分程序计数器Java堆Java虚拟机栈本地方法栈方法区Java虚拟机和内存区域概述程序计数器区域程序计数器(ProgramCounterRegister)一块较小的的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。此内存区域是唯一一
4、个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。JVM自动内存管理:内存区域基础概念Java虚拟机栈和本地方法栈Java虚拟机栈和本地方法栈Java虚拟机栈的概念和特征本地方法栈的概念和特征栈帧概念和特征本地变量表和操作数栈实战内存异常实战Java虚拟机栈和本地方法栈Java虚拟机栈的概念和特征Java虚拟机栈的特征线程私有后进先出(LIFO)栈存储栈帧,支撑Java方法的调用、执行和退出可能出现OutOfMemoryError异常和StackOverflowError异常Java虚拟机栈和本地方法栈本地方法栈的概念和特征Java本地方法栈的特征线程私有后进先出
5、(LIFO)栈作用是支撑Native方法的调用、执行和退出可能出现OutOfMemoryError异常和StackOverflowError异常有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现Java虚拟机和内存区域概述栈帧概念和特征栈帧的概念和特征Java虚拟机栈中存储的内容,它被用于存储数据和部分过程结果的数据结构,同时也被用来处理动态链接、方法返回值和异常分派一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成和异常完成信息Java虚拟机和内存区域概述栈帧概念和特征局部变量表概念和特征由若干个Slot组成,长度由编译期决定单个Slot可以存储一个类型
6、为boolean、byte、char、short、float、reference和returnAddress的数据,两个Slot可以存储一个类型为long或double的数据。局部变量表用于方法间参数传递,以及方法执行过程中存储基础数据类型的值和对象的引用Java虚拟机和内存区域概述栈帧概念和特征操作数栈的概念和特征是一个后进先出栈,由若干个Entry组成,长度由编译期决定单个Entry即可以存储一个Java虚拟机中定义的任意数据类型的值,包括long和double类型,但是存储long和double类型的Entry深度为2,其他类型的深度为1在方法执行过程中,栈帧用于存储计算参数和计算结果;
7、在方法调用时,操作数栈也用来准备调用方法的参数以及接收方法返回结果Java虚拟机栈和本地方法栈栈帧实战通过一个具体例子来演示栈帧的局部变量表和操作数栈的工作方式Java虚拟机栈和本地方法栈内存异常实战Java虚拟机栈和本地方法栈可能发生如下异常情况:如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量时,Java虚拟机将会抛出一个StackOverflowError异常。如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是目前无法申请到足够的内存去完成扩展,或者在建立新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出一个OutOfMemoryError异常
8、。Java虚拟机栈和本地方法栈内存异常实战虚拟机栈栈溢出的实例演示JVM自动内存管理:内存区域基础概念Java堆Java堆Java堆的概念栈与堆Java堆内存异常实战Java堆Java堆的概念Java堆的特征全局共享通常是Java虚拟机中最大的一块内存区域作用是做为Java对象的主要存储区域JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但并不限制采用哪种算法和技术去实现可能出现OutOfMemoryError异常Java堆栈与堆从栈到堆的关联过程:Objectobj=newObject()Java堆Java堆内存异常实战Java堆可能发生如下异常情况:如果实际所需的堆超过了自动内存
9、管理系统能提供的最大容量,那Java虚拟机将会抛出一个OutOfMemoryError异常。JVM自动内存管理:内存区域基础概念方法区和运行时常量池方法区和运行时常量池方法区的概念运行时常量池的概念HotSpot方法区实现的变迁方法区内存异常实战方法区和运行时常量池方法区的概念方法区的特征全局共享作用是存储Java类的结构信息JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存可能出现OutOfMemoryError异常方法区和运行时常量池运行时常量池的概念运行时常量池的特征全局共享是方法区的一部分作用是存储Java类文件常量池中的符号信息可能出现OutOfMemoryError异常方法区和运行时常量池HotSpot方法区实现的变迁永久代与方法区在JDK1.2JDK6,HotSpot使用永久代实现方法区在JDK7开始,HotSpot开始了移除永久的代计划-符号表被移到NativeHeap中-字符串常量和类的静态引用被移到JavaHeap中在JDK8开始,永久代已被元空间(Metaspace)所代替