简单谈谈JVM、JRE和JDK的区别与联系

 更新时间:2016年05月11日 11:18:59   投稿:hebedich  
简单的说JDK是用于开发的而JRE是用于运行Java程序的。JDK和JRE都包含了JVM,从而使得我们可以运行Java程序。JVM是Java编程语言的核心并且具有平台独立性。

为了学习数据库,重装了系统,之前前一直在用eclipse,现在准备换成myeclipse,这之前当然需要重新设置环境变量,顺手写下有关jdk、jre与jvm的区别与联系以供交流参考。

首先来说一下JDK
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API )。
有以下三种版本:
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。


再来谈谈JRE
JRE为Java Runtime Environment的简称,Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)--编译器、调试器和其它工具。JRE需要辅助软件--Java Plug-in--以便在浏览器中运行applet。
没有JDK的话,无法编译Java程序,但在有JRE环境的系统上可以运行程序。所以当你只需要运行Java程序或Applet,下载并安装JRE即可。如果你要自行开发 Java软件,请下载JDK。


最后再来了解一下JVM
JVM即Java Virtual Machine(Java虚拟机),JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
这是三者的关系图:

我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

JVM(Java Virtual Machine),即Java虚拟机

JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。

JVM是Java语言跨平台(这里的“平台”是指不同的操作系统)的基础,要想在不同的操作系统上运行Java程序,就需要在不同操作系统上安装对应的JVM。所以,JVM有Windows版本、MAC版本、Linux版本等。

JRE(Java Runtime Environment),即Java运行环境

JRE包括Java虚拟机和Java程序所需的核心类库。如果要想运行一个开发好的Java程序,只需要在计算机中安装JRE即可。

总结:JRE=JVM+Java类库

JDK(Java Development Kit),即Java开发工具包

JDK是提供给Java开发人员使用的,包含了JRE和一些Java开发工具,如编译工具(javac.exe)、打包工具(jar.exe)等。所以安装了JDK就不需要再安装JRE了。

作为Java语言的学习者,我们必须安装JDK,没有JDK,我们是没有办法编译和运行Java代码的,这也是几乎所有的Java入门教程推荐我们安装JDK的原因。

总结:JDK=JRE+Java开发工具

如何作出选择

选择的标准是按需选择,如果我们仅仅想运行现成的Java程序,安装JRE即可;如果我们想开发Java程序,必须安装JDK。

相关文章

  • IDEA2022版本创建maven web项目的两种方式详解

    IDEA2022版本创建maven web项目的两种方式详解

    创建maven web项目有两种方式,一种是使用骨架方式,一种是不使用骨架的方式,本文结合实例代码给大家介绍了IDEA2022版本创建maven web项目的两种方式,需要的朋友可以参考下
    2023-02-02
  • springboot配置aop切面日志打印过程解析

    springboot配置aop切面日志打印过程解析

    这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 基于Java protected的深入理解

    基于Java protected的深入理解

    本篇文章是对Java protected进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • java计算时间差的方法

    java计算时间差的方法

    这篇文章主要介绍了java计算时间差的方法,涉及java针对时间的转换与计算相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    这篇文章主要介绍了IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下
    2019-05-05
  • 从JVM分析Java的类的加载和卸载机制

    从JVM分析Java的类的加载和卸载机制

    这篇文章主要介绍了从JVM分析Java的类的加载和卸载机制,讲解了Java类的声明周期,需要的朋友可以参考下
    2015-11-11
  • Elasticsearch中store field与non-store field的区别说明

    Elasticsearch中store field与non-store field的区别说明

    这篇文章主要介绍了Elasticsearch中store field与non-store field的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring 事件监听机制实现跨模块调用的思路详解

    Spring 事件监听机制实现跨模块调用的思路详解

    之前一个项目,有两个模块,A 模块需要依赖 B 模块,但现在 B 模块有地方需要调用 A 模块的方法,如果直接依赖,又会产生循环依赖问题,最终选择使用 spring 的事件监听来解决该问题,下面给大家介绍Spring 事件监听机制实现跨模块调用的思路,感兴趣的朋友一起看看吧
    2024-05-05
  • MyBatis的核心配置文件以及映射文件

    MyBatis的核心配置文件以及映射文件

    这篇文章主要介绍了MyBatis的核心配置文件以及映射文件,Mybatis它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低,需要的朋友可以参考下
    2023-05-05
  • 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解

    这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOME环境变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论