首页 > 编程语言 >Java中的专有名词——JVM、JRE、JDK到底是什么关系

Java中的专有名词——JVM、JRE、JDK到底是什么关系

时间:2024-10-11 18:46:39浏览次数:9  
标签:类库 JRE Java JDK JVM 运行

        相信刚开始学习Java的同学一定见过“JVM、JDK、JRE”这三个专有名词,那他们到底代表的是什么,三者之间又有何种关系呢?

        下面我们先来介绍一下三者:

1.JVM

        JVM:Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。

        JVM的主要功能包括:

  1. 加载类:通过类加载器(ClassLoader)将Java类文件加载到内存中。
  2. 字节码执行:JVM将Java字节码(.class文件)翻译成具体操作系统的机器码并执行。
  3. 内存管理:JVM管理内存,包括堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(Program Counter)。其中,堆用于存储对象,栈则保存方法调用和局部变量。
  4. 垃圾回收:JVM自动管理内存中的垃圾回收(Garbage Collection, GC),释放不再使用的对象占用的内存。
  5. 跨平台性:Java的“编写一次,处处运行”正是通过JVM实现的。JVM为不同的操作系统提供了不同的实现,确保相同的字节码可以在任何支持JVM的平台上运行。

2.JRE

        JRE:JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。

        JRE的主要组成部分:

  1. JVM(Java虚拟机): JVM是JRE的核心部分,负责执行Java字节码(.class文件),将其翻译为特定操作系统的机器码。JVM是实现Java跨平台特性的关键,使得Java程序能够在不同的操作系统上运行。

  2. 类库(核心类库): JRE包含了一系列标准的Java类库,这些类库为Java应用提供了常用功能,比如:

    • 基础数据结构:如集合(List、Set、Map等)。
    • I/O操作:文件读写、输入输出流操作等。
    • 网络通信:如Socket、HTTP连接等。
    • 多线程和并发:Java中的线程和并发控制。
    • 图形界面:如AWT、Swing等用于图形用户界面的库。
  3. Java类加载器: JRE包含的类加载器(Class Loader)负责将Java类文件加载到内存中。它的作用是根据程序的需求,动态加载需要的类。

  4. 垃圾回收机制(Garbage Collection, GC): JRE管理应用程序的内存分配和释放,自动回收不再使用的对象,避免内存泄漏和手动内存管理带来的复杂性。

        JRE的主要用途:

        JRE的主要作用是为Java程序提供一个运行时环境,而不是开发环境。如果你只想运行Java应用程序,安装JRE就足够了。它是:

  • 用户端环境:对于普通用户来说,他们不需要编写Java代码,安装JRE即可运行Java应用。
  • 跨平台支持:通过JVM,JRE保证了Java程序在不同平台上的一致运行行为。

3.JDK

        JDK:JDK(Java Development Kit),它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。

        JDK的主要组成部分:

  1. JVM(Java Virtual Machine,Java虚拟机): JDK包含JVM,用于运行编译后的Java字节码。虽然JDK内含JVM,但它不仅仅是用于运行Java程序,还包含了开发相关的工具和库。

  2. JRE(Java Runtime Environment,Java运行时环境): JRE是JDK的一部分,它包含了JVM和一些基础类库,主要用于运行Java应用程序。没有开发工具,是运行时的环境。

  3. 开发工具: JDK提供了许多开发工具,帮助开发人员完成从源代码编写到程序运行的全过程:

    • javac:Java编译器,用于将Java源代码(.java文件)编译成字节码(.class文件)。
    • java:JVM的入口,用于运行编译后的字节码。
    • javadoc:用于生成Java文档的工具,它可以从源代码中的注释生成HTML格式的API文档。
    • jdb:Java调试器,用于调试Java应用程序。
    • jar:打包工具,可以将多个.class文件打包成一个.jar文件(Java归档文件)。
    • javap:Java反汇编工具,用于查看字节码文件的内部结构。
  4. 类库(Libraries): JDK还包含了大量的标准类库,这些库为Java程序提供了各种基础功能,如数据结构、文件操作、网络通信、图形界面、并发编程等。这些类库使得开发人员不必从零开始编写这些功能,大大提高了开发效率。

3.JVM、JRE、JDK关系与区别

        JVM(Java Virtual Machine)、JRE(Java Runtime Environment)和JDK(Java Development Kit)是Java开发和运行环境中的三个重要组成部分,它们之间既有联系又有区别。下面是它们的关系与区别:

        三者的定义:

  1. JVM(Java虚拟机): JVM是Java虚拟机,它是Java运行时环境中的核心部分。JVM负责执行Java字节码,将其翻译为具体平台上的机器指令。JVM是Java跨平台特性的实现者,确保同一个Java程序可以在不同操作系统上运行。

  2. JRE(Java运行时环境): JRE包含JVM以及Java标准类库等资源。它提供了运行Java应用程序所需的所有环境,但不包括开发工具。JRE专为普通用户运行Java程序设计,比如桌面应用程序或Java Web应用。它包含JVM,并且负责Java应用的执行。

  3. JDK(Java开发工具包): JDK是开发人员使用的工具包,它包含JRE、JVM,以及用于编写、编译、调试和打包Java程序的开发工具(如javac编译器、javadoc文档生成器、jar打包工具等)。JDK是编写和构建Java应用的必备工具。

        三者关系:

  • JVM是JRE的一部分:JVM负责执行Java字节码,是Java程序运行的核心,但它并不包括Java类库和其他运行环境所需的资源。JVM由JRE包裹,JRE通过提供标准类库、类加载器、垃圾回收机制等,来支持JVM运行Java程序。

  • JRE是JDK的一部分:JRE是用于运行Java程序的环境,而JDK是用于开发Java程序的工具包。JDK不仅包含JRE(也就是运行Java程序的能力),还包含了开发工具,如编译器、调试器等。

因此,JDK包含JRE,JRE包含JVM,它们的层级关系如下:

JDK
 └── JRE
      └── JVM
  • JVM:执行Java字节码,翻译为机器码。
  • JRE:包含JVM和Java标准类库,提供运行Java程序的环境。
  • JDK:包含JRE和开发工具,提供开发和运行Java程序的完整工具包。

总结:

  • JVM是核心,用于执行Java字节码;
  • JRE在JVM的基础上,提供运行环境,使得Java程序可以运行;
  • JDK不仅包含JRE,还提供开发工具,供开发人员编写、编译和调试Java程序。

        JVM负责程序的执行,JRE确保Java程序能运行,而JDK则是为Java开发提供工具。

标签:类库,JRE,Java,JDK,JVM,运行
From: https://blog.csdn.net/m0_53926113/article/details/142833246

相关文章

  • 【信创问题】解决东方通(TongWeb)报错 java.lang.NoClassDefFoundError: javax/persis
    写在前边今天帮现场同事定位问题,情况是项目同事使用东方通(TongWeb7.0)部署公司项目时,出现以下报错导致服务启动失败。简单排查了下发现:war包内WEB-INF/lib/javax.persistence-api-2.2.jar中包含javax.persistence.spi.PersistenceProvider这个接口,不应该报这个错误呀。Causedby......
  • Java基础语法-类型转换
    类型转换由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。低------------------------->高byte,short,char->int->long->float->double运算中,不同类型的数据先转化为同一类型,然后再进行运算。强制转换(类型)变量名高-低自动转换低-高inti=128;......
  • 使用JNA在java中调用rust函数
    JNA是sun公司对JNI能力的封装,更多信息请自行问AI。咱们直接上代码。调用系统本地库先引入jar包:<!--https://mvnrepository.com/artifact/net.java.dev.jna/jna--><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId>......
  • java+vue计算机毕设工作计划统计分析系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今快节奏的商业环境中,企业的高效运作离不开精细化的管理与规划。随着企业规模的扩大,部门间协作的复杂性、员工工作计划的多样性以及项目进度的动......
  • java+vue计算机毕设工程认证辅助系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球工程教育的快速发展,工程认证已成为衡量高等教育质量与国际接轨的重要标尺。它不仅要求教育机构具备完善的教学体系,还强调对学生实践能力和创......
  • java+vue计算机毕设食品点评及售卖系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的快速发展和人们生活节奏的加快,线上食品点评及售卖系统已成为现代都市生活不可或缺的一部分。近年来,食品安全问题频发,消费者对食品质量、......
  • LeetCode:871. 最低加油次数(DP Java)
    目录871.最低加油次数题目描述:实现代码与解析:DP原理思路:871.最低加油次数题目描述:        汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,用数组 stations 表示。其中 stations[i]=[positioni,fueli] 表示第 ......
  • java毕业设计-基于Springboot的多商家商城系统【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:Springboot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能管理员管理:负责系统后台的整体运维,包......
  • java计算机毕业设计分布式生鲜市场信息系统设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和消费观念的转变,生鲜食品市场迎来了前所未有的发展机遇。然而,传统的生鲜销售模式面临着信息不对称、供应链冗长、损耗率高等......
  • 基于java+springboot的社区心理健康服务平台系统小程序
    基于java+springboot的社区心理健康服务平台系统,旨在为社区居民提供全面的心理健康支持。后端运用springboot构建稳定可靠的服务,负责处理用户信息管理、心理咨询师资源整合、心理测评工具管理以及预约咨询安排等核心业务,与数据库有效交互以存储用户心理健康档案、咨询......