1、什么是JVM
JVM是Java Virtual Machine(Java虚拟机)缩写,jvm是一种用于计算机设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。java虚拟机包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使java程序只需要生成在java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。jvm在执行字节码时,实际上最终就是把字节码解释成具体平台上的机器指令执行。
java语言的一个非常重要的特点就是与平台无关性。而使用java虚拟机是实现这一特点的关键。一般高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入了java虚拟机后,java语言在不同平台上运行时不需要重新编译。java语言使用java虚拟机屏蔽了与具体平台相关的信息,使得java语言编译程序只需生成在java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行,这就是java能够一次编译,到处运行的原因(One Write,Everywhere Run)。
2.jre/jdk/jvm 是什么关系?
jre(java运行环境),也就是java平台。所有java程序都要在jre下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。
jdk是程序开发者用来编译,调试java程序用的开发工具包。jdk的工具也是java程序,也需要jre才能执行,为了保持jdk的独立性和完整性,在jdk的安装过程中,jre也是安装的一部分,所以,在jdk的安装目录下有一个名为jre的目录,用户存放jre文件
jvm是jre的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,jvm有自己完善的硬件架构,如处理器,堆栈,寄存器等,
还有相应的指令系统,java语言最重要的特点就是跨平台运行,使用jvm就是为了支持与操作系统无关。
3.jvm原理
jvm是java的核心和基础,在java编译器和OS平台之间的虚拟处理器,它是一种利用软件方法实现的抽象计算机基于下层的操作系统和硬件平台,可以在上面运行自字节码程序
java编译器只要面向jvm,生成jvm能理解的代码或字节码文件,java源文件经编译成字节码程序,通过jvm将每一条指令编译成不同平台机器,通过特定的平台运行。
4.jvm执行程序的过程
1)加载class文件 2)管理并分配内存 3)执行垃圾收集
JRE(java运行环境)由jvm构造的java程序的运行环,也是java程序运行的环境,但是他同时一个系统的一个应用程序,因此它也有他自己的生命周期
也有自己的代码和数据空间,jvm在整个jdk处于最底层,负责于操作系统的交互,用户屏蔽操作系统环境,提供一个完整的java运行环境,因此也就是虚拟机
5.jvm的生命周期
1)jvm实例对应了一个独立运行的java程序,它是进程级别
a)启动。启动一个java程序时,一个jvm实例就产生了,任何一个拥有public static void main(String[] args[])函数的class都可以作为jvm实例运行的起点
b)运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。jvm内部有2中线程:守护线程和非守护线程。main()属于非守护线程。守护线程是jvm自身使用,java程序也可以表明自己创建的线程是守护线程
c)消亡。当程序中的所有非守护线程终止时,jvm才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出
2)jvm执行引擎实例则对应了属于用户执行程序的线程它是线程级别的