解读JDK、JRE、JVM的区别与联系
作者:Salute-Y
一、jdk
JDK(Java Development Kit):
jdk是Java的开发工具包,是整个java开发的核心。
其中主要包含了三方面的内容:
- Java程序的运行环境-JRE
- Java的基础类库(Java API)
Java API是Java的应用程序接口,里面有很多已经写好的Java class,包含一些重要的语法结构和基本的线程、图形和IO等。
我们可以直接拿来使用。
Java的一些工具包(其中包含了javac源码编译器,还有一些其他的命令:jdb,javah,jmp等)。
在学习java之前,一般都是安装运行环境,下载一个JDK。在jdk中有很多的文件,其中最主要的就是四个文件:bin、include、jre、lib。
- bin:bin目录下有大量的可运行exe文件,其中最主要的就是javac.exe文件,源码编译器。
- include:包含一些头文件,用于java和JVM进行交互。
- lib:类库。
- jre:java程序运行环境。
在jre目录底下,还有一个bin文件和lib文件,这两个文件与之前的不同,这里的bin文件可以认为就是jvm,lib文件就是jvm运行时需要的类库。
JVM+ lib库=JRE。
二、jre
JRE(Java Runtime Environment—java运行环境):
jre是java程序的运行环境,所有的Java程序必须依赖jre才能运行。jre中包含jvm,但是只有jvm是不能完全解释字节码文件的,还需要一些核心的类库。
这些类库都存放在jre目录底下的lib文件中。所以jre就包括了两部分:解释字节码的jvm+一些核心类库(存放于lib文件中)
三、jvm
JVM(Java Virtual Machine–java虚拟机):
jvm是jre的一部分,jvm是虚拟出的一台计算机,这台计算机不关心java源代码如何写的,它只关心java源程序编译出的字节码文件,jvm是java程序能实现跨平台的核心,它不关心真实计算机,也不关心操作系统等等,就像一个中间平台,只负责将字节码文件转换成当前计算机能理解的CPU指令集或系统调用。
jvm有自己完善的硬件架构,如处理器、栈区、寄存器等。
总结:jvm是一个虚拟的中间平台,只负责将编译后的字节码文件转换成当前计算机能理解并执行的指令,其他都不关心。jvm是java“一次编译,到处执行”的原因。
四、关系图
五、一个Java程序的执行过程
- 我们利用JDK(通过调用一些Java API)写出java源程序,然后储存在.java文件中。
- JDK中的源码编译器javac将源代码编译成java字节码,储存在.class文件中。
- JRE加载、验证、执行Java字节码。
- JVM将字节码文件解析为机器码映射到CPU指令集或者供系统调用。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。