解读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指令集或者供系统调用。

总结

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

相关文章

  • Java数据结构之红黑树的原理及实现

    Java数据结构之红黑树的原理及实现

    红黑树是一种特殊的二叉查找树,每个结点都要储存位表示结点的颜色,或红或黑。本文将通过示例为大家详细讲讲红黑树的原理及Java实现,感兴趣的可以了解一下
    2022-09-09
  • SpringBoot 自动配置原理及源码解析

    SpringBoot 自动配置原理及源码解析

    SpringBoot 在项目启动的时候封装了创建对象的方法,无需我们手动配置,接下来通过本文给大家介绍SpringBoot 自动配置原理解析及源码展示,感兴趣的朋友一起看看吧
    2021-06-06
  • IntelliJ IDEA 如何配置git的操作方法

    IntelliJ IDEA 如何配置git的操作方法

    这篇文章主要介绍了IntelliJ IDEA 如何配置git,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 解决jar包rar压缩后无法运行问题

    解决jar包rar压缩后无法运行问题

    这篇文章主要介绍了解决jar包rar压缩后无法运行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • mybatis高级映射一对多查询实现代码

    mybatis高级映射一对多查询实现代码

    本篇文章主要介绍了mybatis高级映射一对多查询实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • Java内存模型的深入讲解

    Java内存模型的深入讲解

    这篇文章主要给大家介绍了关于Java内存模型的相关资料,我们常说的JVM内存模式指的是JVM的内存分区,而Java内存模式是一种虚拟机规范,需要的朋友可以参考下
    2021-07-07
  • Java观察者设计模式详解

    Java观察者设计模式详解

    这篇文章主要为大家详细介绍了Java观察者设计模式,对观察者设计模式进行分析理解,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • SpringBoot自定义错误处理逻辑详解

    SpringBoot自定义错误处理逻辑详解

    这篇文章主要介绍了SpringBoot自定义错误处理逻辑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Java教程各种接口的介绍

    Java教程各种接口的介绍

    Java教程各种接口的介绍,需要的朋友可以参考一下
    2013-02-02
  • 详解java数组进行翻转的方法有哪些

    详解java数组进行翻转的方法有哪些

    这篇文章主要介绍了详解java数组进行翻转的方法有哪些,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论