初学java的人,一定被这几个名词搞晕过。在这里把它们的区别记下来。
先来个名词解释:
JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。
JRE :英文名称(Java Runtime Environment),我们叫它:Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。
JDK :英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 、编译器、调试器和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。
再稍微展开解释下:
JVM:就是用于执行java字节码的一个运行环境。这个东西的好处在于支持了程序的可移植性。不管你是用什么语言编写的程序(这里不限于java),只要你能将它翻译(编译)成jvm认识的字节码格式,它就可以执行。
另外,jvm也不是一个版本走遍天下的。比如它有windows版本、linux版本、mac版本等等,不同jvm版本将字节码解析成相应操作系统可以认识的机器语言用于执行。所以,程序员只需要在你不同的操作系统上装上不同的jvm,然后你的同一份代码就可以在不同的操作系统之上运行,而程序员完全感知不到差异。
JRE:严格来讲,如果你可以将每个java的字节码程序做到自满足,即包含自己所有运行时需要的库文件,jre就没什么用了,只要jvm就行。然后,相信所有人都不会这么傻,因为这样会导致很多程序重复包含一些通用的库文件。所以,为了消除重复,jre在发布jvm时,将一些你大概率能够用到的、非常通用的库也一并发布出来。这其实并不难理解,就是一些动态链接库。
JDK:jdk是集大成者,它是给开发人员用的,多了一些开发人员必须要用到的和有助于提高开发效率的工具。例如编译器和调试器程序。所以,如果你是开发人员,你的windows上安装的jdk,那么可以将你的jre卸载了。
综上,jre包含jvm,jdk包含jre和jvm。jvm一般不单存在。
直观目录对应关系
JVM:
jvm
JRE:
jre
JDK:
jdk
最后,你可能有时候听到java SDK,其实指的就是jdk。
SDK是Software Development Kit的缩写,中文意思是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。SDK是一系列文件的组合,它为软件的开发提供一个平台(它为软件开发使用各种API提供便利)。
网友评论