1、JVM – java virtual machine (java虚拟机)
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
一次编译,到处运行
Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够”一次编译,到处运行”的原因。
编译 ① Java源文件—->编译器(javac.exe)—->字节码文件
解释② 字节码文件—->虚拟机JVM(jvm中有解释器java.exe)—->机器码
JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也叫虚拟计算机
2、JRE – java runtime environment (java运行环境)
JRE是指java运行环境。光有JVM还不能成功执行class文件,因为在解释class的时候JVM需要调用解释所需要的类库lib。
jre包含JVM标准实现及Java核心类库。 在JDK的安装目录里可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JRE自带的基础类库主要是JRE\lib\rt.jar这个文件,包括了Java2平台标准版的所有类库。
JRE 是Sun公司发布的一个更大的系统,它里面就有一个 JVM。JRE 就与具体的 CPU 结构和操作系统有关,我们从 Sun 下载 JRE 的时候就看到了不同的各种版本。同JVM一起组成 JRE 的还有一些 API (如 awt , swing 等). JRE 是运行 Java 程序必不可少的。
3、JDK – java development kit (java开发工具包)
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JRE是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。
(JDK是用于java程序的开发,而jre则只能运行class而没有编译的功能。)
Java SE=Java Standard Edition SE主要用于桌面程序,控制台开发(JFC)
Java EE=Java Enterprise Edition EE企业级开发(JSP,EJB)
Java ME=Java Mobile Edition ME嵌入式开发(手机,小家电)
简单认为:
Java SE 是做电脑上运行的软件;Java EE 是用来做网站的-(我们常见的JSP技术);Java ME 是做手机软件的。
在JDK安装目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是 不同的)
我们常常用JDK来代指Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形,网络和文件I/O等等 ,我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。
我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将java文件编译成字节码文件class,在JRE上运行class文件,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
参考文章:
https://baike.so.com/doc/1063579-1125177.html#1063579-1125177-3
https://baike.so.com/doc/1063581-1125209.html
https://baike.so.com/doc/2360646-2496311.html#2360646-2496311-5
https://blog.csdn.net/a236209186/article/details/51742693