在Java环境配置和项目启动中,这三者的配置是项目启动的基础保证。
JVM(Java Virtual Machine),Java虚拟机,就是一个虚拟的用于解析bytecode字节码的”虚拟计算机”。一般与OS操作系统打交道。是整个java实现跨平台的最核心的部分【使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。其屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行】。
JRE(Java Runtime Environment),Java运行环境,用于运行Java的字节码文件,包含Java虚拟机、库函数、运行Java应用程序所必须的文件。
JDK(Java Development Kit),Java开发工具包,包含JRE,以及增加编译器和调试器等用于程序开发的文件。是整个JAVA的核心。
联系:
JVM不能单独搞定.class的执行,解释.class的时候JVM需要调用解释所需要的类库lib。在JDK下面的JRE目录里面有两个文件夹bin和lib,在这里可以认为bin就是JVM,lib中则是JVM工作所需要的类库,JVM+lib=JRE。总体来说,就是我们利用JDK(调用Java Api)开发了属于我们自己的Java程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成Java字节码,在JRE上运行这些java字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
区别:
JDK和JRE区别:
JDK用于开发,是给开发人员用的;JRE用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无需安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。
在bin文件夹目录下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将.java文件编译成.class文件的,这是开发者需要的,而用户(运行程序的人)是不需要的。JDK还有jar.exe,javadoc.exe等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
JRE和JVM区别:
JVM并不代表就可以执行.class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
三者之间的关系:
JDK包含了JRE,JDK和JRE都包含了JVM。也可以说JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。
- JDK: javac,jar,debugging,tools,javap
- JRE:java,javaw,libraries,rt_jar
- JVM:just in Time Compiler(JIT)