一、JRE、JDK、JVM
要了解java程序运行原理,首先需要了解知道jre、jdk、jvm这三者是什么,他们之间又有什么联系。
JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。
JDK(Java Development Kit,java开发工具包)是程序开发者用来编译、调试java程序用的开发工具包。JDK工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。
参见如下两图:
二、其中jvm在java程序的运行过程中起着非常重要的作用
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。还包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。这个也是java最大的特色跨平台性,也就是一处编写,处处运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。
三、JVM的体系结构
1.类装载器(ClassLoader)(用来装载.class文件)
2.执行引擎(执行字节码,或者执行本地方法)
3.运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)
四、java源代码的编译过程
java从源代码编译成字节码最后由jvm解释为机器可执行的机器码,最后由计算机执行,其过程如下:
通过将.java的源程序文件编译成.class字节码文件,之后由JVM将.class文件解释成机器码,最后由本地计算机执行。
Java虚拟机执行字节码的过程由一个循环组成,它不停地加载程序,进行合法性和安全性检测,以及解释执行,直到程序执行完毕(包括异常退出)。Java虚拟机首先从后缀为“.class”文件中加载字节码到内存中,接着在内存中检测代码的合法性和安全性,例如,检测Java程序用到的数组是否越界、所要访问的内存地址是否合法等,然后解释执行通过检测的代码以及根据不同的计算机平台将字节码转化成为相应的计算机平台的机器代码,再交给相应的计算机执行。如果加载的代码不能通过合法性和安全性检测,则Java虚拟机执行相应的异常处理程序。Java虚拟机不停地执行这个过程直到程序执行结束。虽然Java语言含有编译命令,但是Java虚拟机对字节码的解释执行机制决定了Java语言是一种解释执行的语言。
五、参考博文