1,JVM(Java Virtual Machine)
JVM(Java虚拟机)是整个Java实现跨平台最核心的部分。
所有的Java程序都会被先编译为后缀是(.class)的类文件,这种类文件可以再虚拟机上执行。
也就是说(.class)的类文件并不直接与机器的操作系统相对应,而是经过了虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
JVM是Java平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。
JVM通过抽象操作系统和CPU结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法,主机硬件,主机操作系统无关。
JVM的主要工作是解释自己的指令集(即字节码)到CPU的指令集或对应的系统调用,保护用户被恶意程序骚扰。
JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(字节码文件(.class))
2,JRE(Java runtime environment)
JRE(Java运行环境)主要作用是协助字节码文件(.class)在JVM(Java虚拟机)中执行。
只有JVM还不能让字节码文件(.class)执行,因为在解释字节码文件(.class)的时候JVM需要调用解释所需要的类库lib。
在JDK的安装目录里你可以找到JRE目录,里面有两个文件夹bin和lib。
在这里可以认为bin里的就是JVM,而lib则是JVM工作所需要的类库,二者合并就称为JRE。
JRE只与具体的CPU结构和操作系统有关,是运行的Java程序必不可少的
3,JDK(Java Development kit)
JDK的中文名是Java开发工具包
我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。
其中,真正在运行java时起作用的是以下四个文件夹:bin,include,lib,jre。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
现在我们可以看出这样的一个关系:JDK包含JRE,而JRE包含JVM。
(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求选则jre路径就ok了。
4,关系概括:
JDK是Java程序开发时用的开发工具包,其内部也有JRE运行环境。
JRE是Java程序运行时需要的运行环境。如果不做Java开发工作,只安装JRE就可以运行已经存在的Java程序了。
JDK,JRE内部都包含了Java虚拟机JVM,Java虚拟机内部包含许多应用程序的类的解释器和类加载器等。