定义:
JVM(java Virtual Machine)Java虚拟机
JDK(Java Develpment Kit) java 开发工具
JRE(Java Runtime Environment) java运行时环境
-------------------------------------------------------------------------------------------------------------
JDK: 是java开发工具包,是Sun公司针对java开发人员的产品,jdk中包含jre,在jdk的安装目录下有一个jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里面就是jvm,lib中是java工作需要的类库,而java和lib合起来就称为jre 。
JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具( Java编译器(javac.exe)、Java运行时解释器(java.exe)、Java文档化化工具(javadoc.exe)及其它工具及资源 )和Java基础的类库(即Java API)。 其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。有这样一个关系,JDK包含JRE,而JRE包 含JVM。 bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件 ,lib:类库 ,jre:java运行环境 ,总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
JRE,包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 (jre里有运行.class的java.exe)
JVM ,它是整个java实现跨平台的最核心的部分,所有的java程序首先被编译为.class文件,这种类文件可以在虚拟机上运行,也就是说class并不直接与机器的操作系统相对应。经过虚拟机间接的与操作系统交互,由虚拟机将程序解释给本地系统执行,只有jvm还不能将class执行,因为在解释class的时候jvm需要调用解释所需要的类库lib,而jre包含lib类库,jvm屏蔽了具体操作系统平台的相关信息,使得java程序只需要生成在java虚拟机上运行的目标代码。可以在多种平台(操作系统)上不加修改的运行 。
-----------------------------------------------------------------------------------------------------------------
区别:
1.JDK是给开发人员使用的,而JRE和JVM针对普通用户。
2.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
3.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
----------------------------------------------
Java跨平台的原理:利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码(.class文件),在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
----------------------------------------------
参考资料:原文