JDK、JRE和JVM的区别与联系,Java能跨平台的原因

首先,我们来了解一下它们的概念:

  1. JVM (Java Virtual Machine):是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class这种类型的文件,它能够识别 class 文件中的字节码指令并调用对应操作系统上的 API 完成动作。此外,jvm 是 Java 能够跨平台的核心。

  2. JRE (Java Runtime Environment):Java 运行时环境,为 Java 的运行提供了所需环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。如果你的电脑不是用来开发 Java 程序的,而仅仅是用来部署和运行 Java 程序的,那么只需要安装 jre 即可。

  3. JDK(Java Development Kit):Java 开发工具包,提供了 Java 的开发环境和运行环境。jdk 是整个 Java 开发的核心,它不仅包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。

    通过上面的介绍,得出以下结论:
    JDK>JRE>JVM
    如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK

好的,下面来继续讨论为什么java能够跨平台?

Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台,而是它的 jvm 能够跨平台。
我们都知道,不同的操作系统上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作。那么这样的话,太麻烦了。
而 Java 引入了字节码的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用。针对不同的系统有不同的 jvm 实现,有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现,但是同一段代码在编译后的字节码是一样的。继续沿用上面的例子,在 Java API 层面,我们调用系统声音设备的代码是唯一的,和系统无关,编译生成的字节码也是唯一的。但是同一段字节码,在不同的 jvm 实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可在不同平台运行(前提是已经安装好了与操作系统版本对应的jvm)。

发布了7 篇原创文章 · 获赞 0 · 访问量 158

猜你喜欢

转载自blog.csdn.net/Weixiangxiang1996/article/details/101172413