解读JDK、JRE、JVM的区别与联系

 更新时间:2024年08月23日 10:54:06   作者:Salute-Y  
这篇文章主要介绍了解读JDK、JRE、JVM的区别与联系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、jdk

JDK(Java Development Kit):

jdk是Java的开发工具包,是整个java开发的核心。

其中主要包含了三方面的内容:

  • Java程序的运行环境-JRE
  • Java的基础类库(Java API)

Java API是Java的应用程序接口,里面有很多已经写好的Java class,包含一些重要的语法结构和基本的线程、图形和IO等。

我们可以直接拿来使用。

Java的一些工具包(其中包含了javac源码编译器,还有一些其他的命令:jdb,javah,jmp等)。

在学习java之前,一般都是安装运行环境,下载一个JDK。在jdk中有很多的文件,其中最主要的就是四个文件:bin、include、jre、lib。

  • bin:bin目录下有大量的可运行exe文件,其中最主要的就是javac.exe文件,源码编译器。
  • include:包含一些头文件,用于java和JVM进行交互。
  • lib:类库。
  • jre:java程序运行环境。

在jre目录底下,还有一个bin文件和lib文件,这两个文件与之前的不同,这里的bin文件可以认为就是jvm,lib文件就是jvm运行时需要的类库。

JVM+ lib库=JRE。

二、jre

JRE(Java Runtime Environment—java运行环境):

jre是java程序的运行环境,所有的Java程序必须依赖jre才能运行。jre中包含jvm,但是只有jvm是不能完全解释字节码文件的,还需要一些核心的类库。

这些类库都存放在jre目录底下的lib文件中。所以jre就包括了两部分:解释字节码的jvm+一些核心类库(存放于lib文件中)

三、jvm

JVM(Java Virtual Machine–java虚拟机):

jvm是jre的一部分,jvm是虚拟出的一台计算机,这台计算机不关心java源代码如何写的,它只关心java源程序编译出的字节码文件,jvm是java程序能实现跨平台的核心,它不关心真实计算机,也不关心操作系统等等,就像一个中间平台,只负责将字节码文件转换成当前计算机能理解的CPU指令集或系统调用。

jvm有自己完善的硬件架构,如处理器、栈区、寄存器等。

总结:jvm是一个虚拟的中间平台,只负责将编译后的字节码文件转换成当前计算机能理解并执行的指令,其他都不关心。jvm是java“一次编译,到处执行”的原因。

四、关系图

五、一个Java程序的执行过程

  • 我们利用JDK(通过调用一些Java API)写出java源程序,然后储存在.java文件中。
  • JDK中的源码编译器javac将源代码编译成java字节码,储存在.class文件中。
  • JRE加载、验证、执行Java字节码。
  • JVM将字节码文件解析为机器码映射到CPU指令集或者供系统调用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • JMeter自定义日志与日志分析的实现

    JMeter自定义日志与日志分析的实现

    JMeter与Java程序一样,会记录事件日志,本文就介绍一下JMeter自定义日志与日志分析的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java基础之反射原理与用法详解

    Java基础之反射原理与用法详解

    这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Spring中@Configuration注解的使用场景

    Spring中@Configuration注解的使用场景

    这篇文章主要介绍了Spring中@Configuration注解的使用场景,@Configuration注解是从Spring 3.0版本开始加入的一个使Spring能够支持注解驱动开发的标注型注解,主要用于标注在类上,需要的朋友可以参考下
    2023-11-11
  • MyBatis通用Mapper实现原理及相关内容

    MyBatis通用Mapper实现原理及相关内容

    今天小编就为大家分享一篇关于MyBatis通用Mapper实现原理及相关内容,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 通过Spring自定义NamespaceHandler实现命名空间解析(推荐)

    通过Spring自定义NamespaceHandler实现命名空间解析(推荐)

    这篇文章主要介绍了通过Spring自定义NamespaceHandler实现命名空间解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • MybatisPlus实现对象嵌套关联查询一对多List集合查询

    MybatisPlus实现对象嵌套关联查询一对多List集合查询

    这篇文章主要介绍了MybatisPlus实现对象嵌套关联查询一对多List集合查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java利用钉钉机器人实现发送群消息

    Java利用钉钉机器人实现发送群消息

    这篇文章主要为大家详细介绍了Java语言如何通过钉钉机器人发送群消息通知,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-09-09
  • eclipse中maven的pom.xml文件中增加依赖的方法

    eclipse中maven的pom.xml文件中增加依赖的方法

    日 在Maven项目中,可以使用pom.xml文件来添加依赖包,本文主要介绍了eclipse中maven的pom.xml文件中增加依赖的方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • PowerJob的DispatchStrategy方法工作流程源码解读

    PowerJob的DispatchStrategy方法工作流程源码解读

    这篇文章主要为大家介绍了PowerJob的DispatchStrategy方法工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Spring自动配置之condition条件判断下篇

    Spring自动配置之condition条件判断下篇

    这篇文章主要为大家介绍了SpringBoot condition条件判断功能的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论