今天开始给大家分享JVM系列知识,欢迎大家一起学习交流共同进度!
1、什么是JVM?
JVM即Java虚拟机,可以理解为一种抽象计算机,它拥有一个指令集,在运行时操作各种内存区域。JVM对Java语言一无所知,它只知道一种特定的二进制格式,即类文件格式,我们写好的Java程序最终交给JVM执行的时候会被编译成二进制格式的类文件,JVM只能读取二进制格式的类文件,所以任何编程语言只要编译后的格式符合要求,本质上都可以在JVM上运行。
2、JVM的运行位置
JVM是运行在操作系统之上的软件。支持跨平台。
3、JVM的版本
HotSpot VM:JDK 默认内置 JVM 是 HotSpot VM,应用最广泛的JVM,大家最常用的就是这个。
BEA JRockit VM:JRockit VM由BEA公司开发。后BEA公司在2008年被Oracle收购,JRockit专注于服务端应用,JRockit内部不包含解释器实现,全部代码都靠及时编译器(JIT)编译后执行
IBM J9 VM :与HotSpot接近,服务器端、桌面应用、嵌入式等多用途VM,广泛用于IBM的各种Java产品号称是世界上最快的Java虚拟机。
4、JVM的体系结构
类加载器:在JVM启动时或者是在类运行时将需要的class文件加载到JVM中。
执行引擎:负责执行class文件中包含的字节码指令,相当于实际机器上的CPU
内存区域:jvm将内存划分为若干个区以模拟实际机器上的存储、记录和调度功能模块
本地方法调用:调用C或C++实现的本地方法的代码返回相应的结果
5、JVM的生命周期
5.1 虚拟机的启动
JVM的启动是通过引导类加载器(BootstrapClassLoader )创建一个初始类(initial class)来完成的,这个类是虚拟机的具体实现来指定的。
5.2 虚拟机的执行
一个运行中的Java虚拟机有着一个明确的任务:执行Java程序
程序开始执行时JVM才运行,程序结束时它就停止。
其实执行一个Java程序的时候,本质上执行的是一个叫做JVM的进程。
5.3 虚拟机的退出
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而被迫异常终止。
- 由于操作系统自身出现错误而导致Java虚拟机进程终止。
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
- JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出