1 图形理解
2 JDK(Java Development Kit):JAVA开发工具包
JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK包含JRE,而JRE包 含JVM。
2.1 jdk所含目录
打开我们自己下载的JDK
发现底下有4个文件夹:bin,include,jre,lib
2.1.1 那么这四个文件夹又是干嘛的呢?
首先要了解javac.exe是编译功能
java.exe是执行class,如果没有编译的话是不能执行的,同理,javac.exe编译完以后如果没有java.exe执行的话也是没有运行的
2.2 配置环境
我们在配置环境的时候就是JDK的路径
我们的PATH底下配置的是JDK的bin目录
2.3 JDK中的bin
在JDK和JRE的区别中 JRE的bin中是没有javac.exe文件的.
当安装好jdk后,打开bin目录,有两个重要的exe文件:javac.exe(编译器
和java.exe(.class文件执行器)
既然看到了javac.exe文件,那么问题来了? javac.exe是干什么的?
javac.exe(编译器)
.class文件(JVM文件)
java.exe(.class文件执行器)
JAVA文件的执行过程 参考: https://www.cnblogs.com/wangjiming/p/10315983.html
Java Runtime Environment(JRE):JAVA运行环境
下图是JRE的安装目录:里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
3 JVM(java virtual machine):JAVA虚拟机
JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。
4 JDK、JRE、JVM三者的联系与区别
1.三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
2.三者区别:
a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
参考至 :
https://www.cnblogs.com/zhangzongxing01/p/5559126.html
https://ihyperwin.iteye.com/blog/1513754
https://blog.youkuaiyun.com/ancientear/article/details/79483592