写在前面
本文主要是面向有一定java基础,但是又对一些概念特别模糊的读者。JDK,JRE和JVM是三个极易混淆的概念。
下面我们一起来学习一下:
- 英文全称角度
英文简称往往不利于我们理解,我们来从英文全称来试着理解一下。
JDK(Java Development Kit): java开发工具包
JRE(Java Runtime Environment): java运行环境
JVM(Java Virtual Machine): java虚拟机
选择用全称是方便区分它们,记忆它们的具体意义。
2. 概念包含关系
JDK(Java开发工具包)
Java Developer Kit包含开发Java程序所需的工具,以及运行程序的JRE。这些工具包括编译器(javac.exe),Java应用程序启动器(java.exe),Appletviewer等。编译器将Java代码转换为字节代码。Java应用程序启动器将打开JRE,加载类,然后调用其main方法。
如果您要编写自己的程序并编译m,则需要JDK。对于运行Java程序,JRE就足够了。JRE的目标是执行Java文件,即JRE = JVM + Java包类(如util,math,lang,awt,swing等)+运行时库。JDK主要针对Java开发。即,您可以创建一个Java文件(借助Java软件包),编译一个Java文件并运行一个Java文件。
JRE(Java运行环境)
Java运行时环境包含JVM,类库和其他支持文件。它不包含任何开发工具,例如编译器,调试器等。实际上JVM运行该程序,并且使用类库以及JRE中提供的其他支持文件。如果要运行任何Java程序,则需要在系统中安装JRE
在Java虚拟机提供了执行代码的平台无关的方式; 程序员可以专注于编写软件,而不必担心软件的运行方式或运行位置。但是,请注意,JVM本身不是独立于平台的。它仅帮助Java以独立于平台的方式执行。当JVM必须将字节码解释为机器语言时,则必须使用某种本机或特定于操作系统的语言与系统进行交互。关于平台独立性的概念必须非常清楚。即使有许多用Java编写的JVM,但是它们也很少有特定于操作系统的代码。
如果您只想运行applet(例如,在线Yahoo游戏或拼图),则需要在计算机上安装JRE。
JVM(Java虚拟机)
众所周知,编译Java文件时,输出不是’exe’,而是’.class’文件。“ .class”文件由JVM可以理解的Java字节码组成。Java虚拟机根据底层操作系统和硬件组合将字节码解释为机器码。它负责所有事情,例如垃圾收集,数组边界检查等。JVM依赖于平台。
在JVM因为它提供了不依赖于底层操作系统和机器的硬件架构上的机器接口被称为“虚拟”。这种与硬件和操作系统的独立性是Java程序一次写入无处不在的价值的基石。
那里有不同的JVM实现。这些可能在性能,可靠性,速度等方面有所不同。这些实现在Java规范未提及如何实现功能的那些领域将有所不同,例如垃圾收集过程的工作方式取决于JVM,而Java规范则没有定义执行此操作的任何特定方式
一篇特别好的英文参考文献:
https://javabeat.net/what-is-the-difference-between-jrejvm-and-jdk/