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

总结

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

相关文章

  • Spring Boot父子工程POM依赖关系举例详解

    Spring Boot父子工程POM依赖关系举例详解

    这篇文章主要介绍了Spring Boot父子工程POM依赖关系的相关资料,Spring Boot父子工程通过Maven继承机制实现统一版本、依赖和插件管理,模块化开发与代码复用,提升项目可维护性与效率,需要的朋友可以参考下
    2025-08-08
  • 聊聊Java的switch为什么不支持long

    聊聊Java的switch为什么不支持long

    这篇文章主要介绍了Java的switch为什么不支持long,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot图文并茂带你掌握devtools热启动

    SpringBoot图文并茂带你掌握devtools热启动

    这篇文章主要介绍springBoot插件工具热部署Devtools,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java杂谈之如何优化写出漂亮高效的代码

    Java杂谈之如何优化写出漂亮高效的代码

    不一致的代码会造成认知上的负担,在一个系统中,做类似的事情,却有不同的做法,或者起到类似作用的事物,却有不同的名字,让人困惑
    2021-09-09
  • SpringBoot拦截器如何获取http请求参数

    SpringBoot拦截器如何获取http请求参数

    这篇文章主要给大家介绍了SpringBoot拦截器如何获取http请求参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 使用Java编写GUI对话框的教程

    使用Java编写GUI对话框的教程

    这篇文章主要介绍了使用Java编写GUI对话框的教程,是Java图形化编程中的基础知识,需要的朋友可以参考下
    2015-10-10
  • java命令打jar包详细步骤示例讲解

    java命令打jar包详细步骤示例讲解

    对于如何将一个java文件通过命令形式进行打包,通过以下示例进行讲解,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • Mybatis plus结合springboot使用

    Mybatis plus结合springboot使用

    本文主要介绍了MyBatisPlus使用SpringBoot数据库操作,从添加依赖到测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Java实战之医院管理系统的实现

    Java实战之医院管理系统的实现

    这篇文章主要介绍了如何利用Java实现医院管理系统,文中用到的技术有:SpringBoot、Layui、Freemaker等,感兴趣的同学可以了解一下
    2022-04-04
  • Java获取当前时间的时间戳方法总结

    Java获取当前时间的时间戳方法总结

    Java中获取时间戳的方式有很多种,下面这篇文章主要给大家介绍了关于Java获取当前时间的时间戳的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-06-06

最新评论