JVM、JDK、JRE
JAVA执行过程:
Java源文件(*.java)---编译器(compiler)----->字节码文件(*.class)---解释器(interpreter)----->执行结果
JVM:
结构:1.JVM指令系统
JVM指令系统同其他计算机的指令系统极其相似。Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,
操作数紧随在操作码的后面,其长度根据需要而不同。当长度大于8位时,操作数被分为两个以上字节存放。
Java指令系统是以Java语言的实现为目的设计的,其中包含了用于调用方法和监视多线程系统的指令。
Java的8位操作码的长度使得JVM最多有256种指令,已使用了160多种操作码。
2.JVM寄存器
所有的CPU均包含用于保存系统状态和处理器所需信息的寄存器组。JVM只设置了4个最为常用的寄存器。
①.pc程序计数器
②.optop操作数栈顶指针
③.frame当前执行环境指针
所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。
3.JVM栈结构
Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个
方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:
①.局部变量:存储方法中的局部变量。vars寄存器指向该局部变量表的第一个局部变量
②.执行环境:保存解释器对Java字节码进行解释过程中所需的信息(上次调用的方法、局部变量指针、和
操作数栈的栈顶和栈底指针)
③.操作数栈:存储运算所需操作数以及运算的结果
4.JVM碎片回收堆
Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例
分配完存储空间后,便开始记录对该实例所占内存区域的使用。一旦对象使用完毕,便将其回收到堆中
5.JVM存储区
JVM有两类存储区:
常量缓冲池:存储类名称、方法和字段名称以及串常量
方法区:存储Java方法的字节码
原理:JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并
利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。
java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过
JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
装载:JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己
的代码和数据空间。
JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此
也就虚拟计算机.操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境。
①.创建JVM装载环境和配置
②.装载JVM.dll
③.初始化JVM.dll并挂接到JNIENV(JNI调用接口)实例
④.调用JNIEnv实例装载并处理class类
执行过程:1.加载.class文件
2.管理并分配内存
3.执行垃圾回收集
JDK:Java Development Kit(Java开发工具包)-----自行开发Java软件
JRE:Java Runtime Environment(Java运行时环境)-----运行Java程序或Applet
JDK、JRE、JVM三者关系:JDK包含JRE和Tools(工具类),JRE包含核心类库和JVM
关系图: