【JAVA面试题】JDK、JRE、JVM 三者区别和联系

【JAVA面试题】JDK、JRE、JVM 三者区别和联系

在 Java 面试中,JDKJREJVM 是必考的基础知识点。理解它们的区别和联系,不仅有助于面试,还能帮助你更好地掌握 Java 的运行机制。本文将通过 定义功能关系 三个方面,深入解析 JDK、JRE 和 JVM。


1. 基本概念

1.1 JDK(Java Development Kit)

  • 全称:Java Development Kit
  • 定义:Java 开发工具包。
  • 功能
    • 提供 Java 开发所需的工具(如 javacjavajconsole 等)。
    • 包含 JRE 和开发类库。
  • 使用场景:用于开发和编译 Java 程序。

1.2 JRE(Java Runtime Environment)

  • 全称:Java Runtime Environment
  • 定义:Java 运行时环境。
  • 功能
    • 提供 Java 程序运行所需的环境。
    • 包含 JVM 和核心类库。
  • 使用场景:用于运行 Java 程序。

1.3 JVM(Java Virtual Machine)

  • 全称:Java Virtual Machine
  • 定义:Java 虚拟机。
  • 功能
    • 负责执行 Java 字节码(.class 文件)。
    • 实现 Java 的跨平台特性(一次编写,到处运行)。
  • 使用场景:用于解释和执行 Java 字节码。

2. 三者关系

2.1 包含关系

  • JDK 包含 JRE 和开发工具。
  • JRE 包含 JVM 和核心类库。

用图表示:

JDK
├── JRE
│   ├── JVM
│   └── 核心类库
└── 开发工具(javac、java、jconsole 等)

2.2 功能关系

  1. 开发阶段

    • 使用 JDK 中的 javac 工具将 .java 文件编译为 .class 文件。
    • 示例:
      javac HelloWorld.java
      
  2. 运行阶段

    • 使用 JRE 中的 java 工具运行 .class 文件。
    • JVM 负责加载字节码并执行。
    • 示例:
      java HelloWorld
      

3. 详细解析

3.1 JDK 的组成

  • 开发工具
    • javac:Java 编译器,将 .java 文件编译为 .class 文件。
    • java:Java 解释器,运行 .class 文件。
    • jconsole:Java 监控和管理控制台。
  • JRE:提供运行时环境。
  • 核心类库:包含 Java 标准库(如 java.langjava.util 等)。

3.2 JRE 的组成

  • JVM:负责执行字节码。
  • 核心类库:提供 Java 程序运行所需的基础类。
  • 其他工具:如 java 命令。

3.3 JVM 的作用

  • 加载字节码:将 .class 文件加载到内存中。
  • 解释执行:将字节码解释为机器码并执行。
  • 内存管理:负责垃圾回收和内存分配。
  • 跨平台支持:通过不同平台的 JVM 实现,实现 Java 的跨平台特性。

4. 跨平台特性

Java 的跨平台特性是通过 JVM 实现的。具体流程如下:

  1. 编写代码:在任意平台上编写 .java 文件。
  2. 编译代码:使用 javac.java 文件编译为 .class 文件(字节码)。
  3. 运行代码:在不同平台上使用对应的 JVM 运行 .class 文件。
示例:
  • Windows 平台
    • 使用 Windows 版的 JVM 运行 .class 文件。
    • JVM 将字节码映射到 Windows 的系统调用。
  • Linux 平台
    • 使用 Linux 版的 JVM 运行 .class 文件。
    • JVM 将字节码映射到 Linux 的系统调用。

5. 总结

  • JDK:Java 开发工具包,包含 JRE 和开发工具,用于开发和编译 Java 程序。
  • JRE:Java 运行时环境,包含 JVM 和核心类库,用于运行 Java 程序。
  • JVM:Java 虚拟机,负责执行字节码,实现 Java 的跨平台特性。

三者的关系可以简单概括为:

  • JDK 是开发者的工具箱。
  • JRE 是程序运行的环境。
  • JVM 是程序执行的引擎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27284.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电池管理系统(BMS)架构详细解析:原理与器件选型指南

BMS(电池管理系统)架构详细讲解 从你提供的BMS(Battery Management System)架构图来看,主要涉及到电池监控模块、通信模块、功率控制模块等部分。下面我将详细讲解该架构的各个功能模块及其工作原理。 1. 电池管理核…

Linux常见基本指令(二)

目录 1、Linux基础指令 文本查看 cat指令 more指令 less指令 head指令&tail指令 时间相关指令 查找、搜索相关指令 find指令 which指令 whereis指令 alias指令 grep指令 打包压缩和解压缩 zip指令(压缩) unzip(解压&…

HarmonyOS学习第12天:解锁表格布局的奥秘

表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…

动态规划刷题

文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示:dp[i],表示dp表中i下标位置的值 2. 状态转移方程:以i位置位置的状态,最近的一步来划分问题,比如可以将状态拆分成前状态来表示现状态,dp[i] …

大语言模型微调的基本概念介绍

大型语言模型(LLMs)正在以惊人的速度发展,LLM微调的潜力更是如此。大型语言模型的生命周期有几个关键步骤,今天我们将要介绍这个周期中最丰富、最耗时的一部分——LLM微调过程。 大语言模型的生命周期 在深入了解大型语言模型&a…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek,实现了AI编程,体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI(CodeGPT) 首先了解不同版本的deepsee…

Spring MVC 程序开发(1)

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…

Notepad++下载地址【亲测好用】

网上下载链接五花八门,最终找到了一个官方下载链接。 本文章就用来记录Notepad下载网址 https://github.com/notepad-plus-plus/notepad-plus-plus/tags

LeetCode 873. Length of Longest Fibonacci Subsequence(2025/2/27每日一题)

昨天工作耽搁了,没来得及打卡每日一题,今日补上: 标题:Length of Longest Fibonacci Subsequence 题目: 例子: Example 1: Input: arr [1,2,3,4,5,6,7,8] Output: 5 Explanation: The longest subsequ…

【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt

在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数…

【小羊肖恩】小羊杯 Round 2 C+K

题目链接:https://ac.nowcoder.com/acm/contest/100672#question C.是毛毛虫吗? 思路: 其实很简单,假设我们要满足题目所给条件,那么这个毛毛虫最坏情况下肯定是一条如下图所示的无向图 右端省略号为对称图形 &…

【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录,并且配置了一个.sh的启动脚本文件 文件内容: #!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名) JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

17、什么是智能指针,C++有哪几种智能指针【高频】

智能指针其实不是指针,而是一个(模板)类,用来存储指向某块资源的指针,并自动释放这块资源,从而解决内存泄漏问题。主要有以下四种: auto_ptr 它的思想就是当当一个指针对象赋值给另一个指针对…

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

Git学习

Git命令 1、管理文件夹,创建版本仓库 创建文件夹 mkdir repos初始化命令 git init2、查看工作区的文件状态 注:新增和修改过后的文件都是红色 git status3、提交缓存区 注:加入缓存区后的文件变成绿色 git add . git add 文件名4、生…

数据库拓展操作

目录 一、截断表: 操作目的: 操作内容: 性能影响: 基本语法: 例子: 二、插入查询结果: 基本语法: 例子: 三、聚合函数: 常用函数: 基…

【Java分布式】Nacos注册中心

Nacos注册中心 SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心,相比 Eureka 功能更加丰富,在国内受欢迎程度较高。 官网:https://nacos.io/zh-cn/ 集群 Nacos就将同一机房内的实例划分为一个集群,一个服务可以包含多个集…

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了,很多之前的移动端地图应用,纷纷都要求适配鸿蒙Next。作为开发者都清楚,所谓的适配其实都是重新开发,鸿蒙的开发语言和纯前端的Javascript不同,也可以Android原始开发的语言不同。鸿蒙自带的…

老牌工具,16年依然抗打!

在电脑还没普及、操作系统为Windows XP/7的时代,多媒体文件的转换操作常常面临格式不兼容的问题。这时一款名为格式工厂的软件成为了众多用户的首选工具。格式工厂以其简洁易用的界面和强大的功能,轻松地进行各种文件格式的转换。成为很多修小伙伴的喜爱…

前缀和算法 算法4

算法题中帮助复习的知识 vector<int > dp( n ,k); n为数组大小 ,k为初始化 哈希表unordered_map<int ,int > hash; hash.find(k)返回值是迭代器 ,找到k返回其迭代器 没找到返回hash.end() hash.count(k)返回值是数字 ,找到k返回1 ,没找到返回0. C和java中 负数…