JVM
Java Virtual Machine
java虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。
JRE
Java Runtime Environment
包含jvm 的标准实现和 Java 的一些基本类库。
JDK
Java Development Kit
Java开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。
三者的关系
显然,一层包含一层。JDK>JRE>JVM
Java能够跨平台运行的原因
Java运行的核心在于JVM,而正是JVM能够跨平台运行。不同的操作系统的 API 是不同的,。我们知道,不同的操作系统向上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作。
而 Java 引入了字节码的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用。针对不同的系统有不同的 jvm 实现,有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现,但是同一段代码在编译后的字节码是一样的。引用上面的例子,在 Java API 层面,我们调用系统声音设备的代码是唯一的,和系统无关,编译生成的字节码也是唯一的。但是同一段字节码,在不同的 jvm 实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可跨平台运行。
还没明白就看完这一段,不同的系统(Windows、Linux、Mac)就代表三个国家的人,如果中国人(电脑)不懂他们讲的话就需要翻译,那么就有这么一个很牛的人什么都懂(JVM),他一个人就能把全部的语言翻译成中文(字节码)。这样的话反正中国人(电脑)认识了。