【秒懂JDK,JRE,JVM的关系】

 🌠作者:@TheMythWS.

🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 

JDK与JRE与JVM的关系

先用一张图来直观感受JDK JRE JVM之间的关系

JDK与JRE的关系  

先说JDK和JRE:
首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。

JDK是面向开发者的,JRE是面向使用JAVA程序的用户

通过上图发现发现有两个JRE文件夹,如果细看里面的内容基本上是一样的,如果是只是Java程序使用者,那么只会有最外层的那个JRE目录,JDK中是JRE自带的,你如果安装了JDK必然里面会有一个JRE.那么问题来了,为什么会有两套JRE呢?
从侧面证明:

利用javac.exe进行编译:

修改这个D:\Java\jdk-8u192\lib文件下的tools.jar,随便修改个名字,再去编译

证明:

dt.jar和tools.jar是两个java最基本的包,里面包含了从java最重要的lang包到各种高级功能如可视化的swing包,是java必不可少的。而path下面的bin里面都是java的可执行的编译器及其工具,如java,javadoc等,报错的原因就是输入的javac的命令不是去JDK中bin目录去找的javac.exe,而是去JDK中lib目录中的tools.jar中com.sun.tools.javac.Main中执行,因此javac.exe只是一个包装器(Wrapper),存在的目的是为了让开发者免于输入过长的指命。

这个时候发现JDK里的工具几乎是用Java所编写,同属于Java应用程序,因此要使用JDK所附的工具来开发Java程序,所以自身需要附一套JRE才能运行

上图中与jdk同级目录下的JRE就是用来运行一般Java程序用的。

两套JRE运行的时候究竟运行哪一个呢?

这个时候JDK中java.exe先从自身目录中找,然后父级目录中找,如果都没有就去注册表中找。

JRE与JVM的关系  

再说JRE和JVM: 

JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行,类似于C#中的CLR。

以下先补充一下跨平台的原理:

Java跨平台解释:

再次强调:javac的命令不是去JDK中bin目录去找的javac.exe,而是去JDK中lib目录中的tools.jar中com.sun.tools.javac.Main中执行,因此javac.exe只是一个包装器(Wrapper),存在的目的是为了让开发者免于输入过长的指命。

C语言跨平台解释:

总结一下:
JVM(Java Virtual Machine)就是一个虚拟的用于执行bytecode字节码的”虚拟计算机”。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。JVM负责将Java字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。
不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。 Java虚拟机是实现跨平台的核心机制。如图所示:

我们说的语言跨平台是编译后的文件跨平台,而不是源程序跨平台。
接下来我们再比较下两种方式的差异:

  • C语言是编译执行的,编译器与平台相关,编译生成的可执行文件与平台相关;
  • Java是解释执行的,编译为中间码的编译器与平台无关,编译生成的中间码也与平台无关(一次编译,到处运行),中间码再由解释器解释执行,解释器是与平台相关的,也就是不同的平台需要不同的解释器.

上面说完了跨平台原理我们再谈JRE和JVM,JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm 和 lib和起来就称为jre。

JVM + Lib = JRE,如果讲的具体点就是bin/server目录下的jvm.dll文件, jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位 于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录下的jvm.dll。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角,成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分,利用这些积分进行投资或获取现实物品。它不同于传统的资金盘,而是以一种更稳健的方式运作,避免了资金盘的风险。 一、卷轴…

替代升级虚拟化 | ZStack Cloud云平台助力中节能镇江公司核心业务上云

数字经济正加速推动各行各业的高质量升级发展,云计算是数字经济的核心底层基础设施。作为云基础软件企业,云轴科技ZStack 坚持自主创新,自研架构,产品矩阵可全面覆盖数据中心云基础设施,针对虚拟化资源实现纳管、替代和…

springboot自定义校验注解的实现

自定义校验注解的实现 通过谷粒商城项目学习了自定义校验器的实现一、编写自定义校验注解二、自定义注解的校验器三、关联自定义的校验器和自定义的校验注解总结 通过谷粒商城项目学习了自定义校验器的实现 近日在学习雷神的谷粒商城项目,其中有一个自定义校验的实…

网络字节序

字节序的概念和示例 CPU向内存保存数据的方式有2种,所以CPU解析数据的方式也分为2种。CPU保存和解析数据的方式叫字节序,分为小端字节序和大端字节序。 大端字节序:高位字节存放到低位地址。 小端字节序:高位字节存放到高位地址。…

2023年第三届中国高校大数据挑战赛思路及代码

比赛时间:2023.12.28 08:00 至 2023.12.31 20:00 赛题方向介绍 1、大数据统计分析方向 涉及内容包含:数据的清洗、数据的预测、数据之间的关联分析、综合评价、分类与判别等 2、文本或图象分析方向 涉及内容包含:计算机视觉基础、特征匹配…

基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

[架构之路-253]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 结构化设计的主要评估指标:高内聚(模块内部)、低耦合(模块之间)的含义

目录 前言: 一、软件工程中的软件设计种类:根据宏观到微观分 (1)软件架构设计(层次划分、模块划分、职责分工): (2)软件高层设计、概要设计(功能模块的接…

样品实验K-KAT348羧酸铋催化剂TDS说明书

样品实验K-KAT348羧酸铋催化剂TDS说明书 50克 100克 200克

【图像分类】基于深度学习的中草药分类系统的设计与实现(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…

【攻防世界-misc】来自银河的信号

1.下载并打开文件,是个音频软件 2.由于打开音频出现的声音类似于无线波,因此需要用RX-SSTV工具打开, RX-SSTV代表“接收图像慢扫描电视”的意思。慢扫描电视是一种通过无线电进行图像传输的技术,通常用于业余无线电领域。RX-SST…

数电实验-----触发器的原理与应用(Quartus II )

目录 触发器概述 1.基本RS触发器 2.同步触发器 (1)RS同步触发器 (2)D触发器 3.边沿触发器 (1)JK触发器 (2)T触发器 JK触发器的转换 (1)JK触发器转换…

消除笔怎么用?手把手教你一键智能消除杂物

消除笔怎么用?消除笔是一种非常实用的工具,可以帮助我们快速修复图片中的小问题。无论是想要消除照片中的路人还是进行一些修改,消除笔都可以轻松地帮助我们实现。 以下是使用消除笔的步骤: 1、打开水印云软件,并在工具…

检索增强生成架构详解【RAG】

生成式AI技术很强大,但它们受到知识的限制。 虽然像 ChatGPT 这样的LLM可以执行许多任务,但每个LLM的基线知识都存在基于其训练数据的差距。 如果你要求LLM写一些关于最近趋势或事件的文章,LLM不会知道你在说什么,而且回答最好是混…

Gateway(拦截器/路由)入门

目录 1、概述2、实现3、网关模块3.1 AbstractGatewayFilterFactory类3.2 AbstractGatewayFilterFactory和 GlobalFilter区别 4、服务模块5、服务之间请求传递请求头6、 代码结构优化 1、概述 微服务框架中网关提供统一的路由方式,并且基于 Filter 链的方式提供了网…

阿里云效一键部署前后端

静态站点到OSS 阿里云-云效,阿里云企业级一站式 DevOps,可以免费使用(会限制人数、流水线数量等,个人项目够用了)。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思,一般一个项目对应一个 Bucke…

YOLOv8优化策略:检测头结构全新创新篇 | RT-DETR检测头助力,即插即用

🚀🚀🚀本文改进:RT-DETR检测头助力YOLOv8检测,保持v8轻量级的同时提升检测精度 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.RT-DETR介绍 论文: https://arxiv.org/pdf/2304.08069.pdf 摘要:…

使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还会遇到跨操作系统进行测试的时候,以…

轨道电流检测IC——FP137/FP137A,适用蓄电池充电器、SPS(适配器)、高侧导轨电流检测器

目录 一、 FP137概述 二、 FP137特点 三、 FP137应用 近年来,随着电子设备的普及与发展,蓄电池充电器、SPS(适配器)、高侧导轨电流检测器等电源产品的需求量不断增加。 货运列车、高铁、地铁以及轨道交通等交通工具,都离不开轨道电流检测…

数据结构与算法复习笔记

1.数据结构基本概念 数据结构: 它是研究计算机数据间关系,包括数据的逻辑结构和存储结构及其操作。 数据(Data):数据即信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称。 数据元素&#xf…

python+pytest接口自动化(5)-requests发送post请求

简介 在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务…