一, 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 语言是一种解释执行的语言.
五, 参考博文
- (1)
- (2)
- (3)https://blog.csdn.net/zdb292034/article/details/80700096(jvm,jre,jdk 关系)
- (4)https://www.jianshu.com/p/ed5702e1072b(java 程序运行原理详细分析)
- (5)
来源: http://www.bubuko.com/infodetail-3382583.html