JDK JRE JVM之间的关系

news2024/11/13 10:22:38

文章目录

  • 1.从定义的角度解释JDK、JRE、JVM
  • 2、详细介绍JDK
  • 3、详细介绍JRE
  • 4、详细介绍JVM
    • 1、JVM内部区域划分
  • 5、如何运行一个java程序?

本篇文章仅仅是个人片面观点,可能有错误或者表述不清的地方

1.从定义的角度解释JDK、JRE、JVM

JDK:Java Develement Kit (java开发工具包
JRE: Java Runtime Environment (java运行环境
JVM: Java Virtual Machine (java虚拟机)


2、详细介绍JDK

JDK全称Java Develement Kit (Java开发工具包),顾名思义就是开发Java所需的工具的集合,打开jdk的安装路径, 可以看到jdk文件夹里面包含了bin、jre、lib等文件夹(如下图1所示);

1.bin目录下最主要的就是java的编译器javac;
2.include里面是java和JVM交互用的头文件;
3.lib里面主要是java类库;

打开里面的jre文件夹,里面又包含bin、lib文件夹,(如下图2所示)java和lib合起来就是jre;

1.其中bin文件夹里就包含有jvm;
2.lib是java工作时所需要的类库

JDK是整个JAVA的核心,包括了Java运行环境(jre),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API);
在这里插入图片描述


jdk、jre、jvm的关系可以简略的按下图理解
在这里插入图片描述


3、详细介绍JRE

JRE全称Java Runtime Environment (java运行环境),包含JVM和java标准核心类库
他和JDK不同的是,他只是一个运行环境,并不是开发环境,因此JRE并没有任何开发工具(编译器、调试器等);
JRE是指java运行环境,只有JVM还不能运行.class文件,因为在解释class的时候JVM需要调用解释所需要的类库lib(jre里有运行.class的java.exe)


4、详细介绍JVM

JVM全称Java Virtual Manchine,就是我们常说的java虚拟机
JVM是java实现跨平台的核心部分,所有的java代码首先被编译为.class文件,这种类文件可以在虚拟机上运行,也就是说.class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接的与操作系统交互,由虚拟机将程序解释给本地系统执行,只有jvm还不能将class执行,因为在解释class的时候jvm需要调用解释所需要的类库lib,而jre包含lib类库,jvm屏蔽了具体操作系统平台的相关信息,使得java程序只需要生成在java虚拟机上运行的目标代码。可以在多种平台(操作系统)上不加修改的运行


JVM首先要把字节码通过类加载器(ClassLoader) 把文件加载到内存中的运行时数据区(Runtime Data Area) ,而字节码文件是JVM的同一套指令集规范,并不能直接交给底层的操作系统去执行,因此需要特定的解析器执行引擎(Execution Engine)把字节码翻译成底层系统指令再交给CPU去执行,而这个过程需要调用其他语言接口本地库接口(Native Interface) 来实现整个程序的功能

1、JVM内部区域划分

在这里插入图片描述
一个JVM进程中,堆区和方法区只有一份,栈和程序计数器每个线程都有自己的一份

堆:放的是new的对象
方法区:放的是类对象(加载好的类)
栈:放的是方法之间的调用关系
程序计数器:放的是下一个要执行的指令的地址

本地方法栈和虚拟机栈的区别:
1.虚拟机栈:(java里面用来保存调用关系的内存空间)
2.本地方法栈:本地方法,也就是JVM内部用c++写的代码,调用关系的内存空间


代码里的局部变量:栈区
代码里的成员变量:堆区
代码里的静态变量:方法区
举例:
在这里插入图片描述

如上图所示:x是成员变量,所以在堆上;y是静态变量,所以在方法区;a是局部变量,所以在栈上

5、如何运行一个java程序?

1.使用记事本或者IDEA(java集成开发环境)编写java的源程序,生成.java文件
2.使用javac.exe编译器对.java文件进行编译,生成.class字节码文件;语法格式:javac xxx.java
3.使用JVM运行.class字节码文件;语法格式:java xxx.class
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS面要素最小外接矩形、外接圆的绘制方法

本文介绍在ArcMap软件中,基于一个面图层,绘制其中面要素的最小外接矩形、最小外接圆等的方法。 首先,我们来看一下本文需要实现的需求。现有一个面要素图层,其中包含多个面要素,如下图所示。我们希望绘制这个面要素图层…

【Redis】Redis十大数据类型—列表List

介绍 List列表是简单的字符串列表,按照插入顺序排序,可以从头部或尾部向List列表添加元素。 列表的最大长度是2^32-1,也就是每个列表支持超过40亿个元素。 实现 底层数据结构是由双向链表或压缩列表实现。 如果列表的元素个数小于 512 个…

Python获取某乎问答区计算机专业学生应聘保洁这一内容,看看为啥会有此事发生

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 不知道现在还有多少人玩知某乎, 今天刷话题的时候看到这么一个问答, 这么有趣的话题,咱们就对其问答内容进行采集一下?? 效果展示 可以看到,数据…

Linux 远程访问控制 SSH SCP SFTP TCP-Wrappers

SSH&#xff08;secure shell&#xff09;协议 一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令 SSH客户端<-----------------网络------------------…

android 布局优化

1.绘制和布局加载原理 本文仅供个人学习记录&#xff0c;详细介绍可查看下面链接 Android布局优化&#xff0c;多套方案全面解析 布局优化的原因&#xff1a;布局嵌套过深&#xff0c;或者其他原因导致布局渲染性能不佳&#xff0c;可能会导致应用卡顿。 android绘制原理&am…

5.3 牛顿-科茨公式

学习目标&#xff1a; 理解微积分基础知识&#xff0c;例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开&#xff0c;并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…

Ajax超详解(新手入门指南)

文章目录 1. AJAX简介2. 前后端交互3. XHR3.1 XMLHttpRequest对象3.2 获取模拟的后端数据3.3 获取网络数据3.4 使用json-server模拟服务器3.4.1 安装node.js3.4.2 安装并使用json-server 3.5 常见的请求方式3.5.1 GET请求3.5.2 POST请求3.5.3 PUT请求3.5.4 PATCH请求3.5.5 DELE…

【图像分割】Segment Anything(Meta AI)论文解读

文章目录 摘要一、引言二、segment anything任务1.任务2.预训练3.zero shot transfer4.相关任务5.讨论 三*、Segment Anything 模型四、Segment Anything 数据引擎五、Segment Anything 数据集六、Segment Anything RAI分析七、Zero-Shot Transfer 实验1.zero shot 单点有效掩模…

springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/130302692 目录 前言 Apollo配置加载顺序 步骤 第一步&#xff1a;Apollo创建properties 第二步&#xff1a;添加namespaces&…

js的dom事件流、事件委托和阻止绑定事件触发

主要讲解事件绑定和事件委托&#xff0c;onclick事件和addEventListener的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

IT项目管理计算题【太原理工大学】

计算题好像也没多少考点&#xff0c;主要就是记公式吧&#xff0c;其他的不想看了&#xff0c;直接考啥看啥&#xff0c;就看两个&#xff1a; ① 根据进度网络图写出时间参数表&#xff0c;ES、EF、LS、LF、TF 以及 FF&#xff0c;关键路径&#xff0c;总工期&#xff1b;② 挣…

volatile 保证内存变量可见性的实现原理解析

目录 volatile 的定义 可见性问题 JMM&#xff08;JavaMemoryModel&#xff09; 保证可见性 现代计算机的内存模型 MESI&#xff08;缓存一致性协议&#xff09; 嗅探 总线风暴 volatile 的两条实现原则 volatile 的定义 Java代码在编译后会编程 Java …

GD(兆易创新)系列FLASH进行FPGA和ZYNQ配置固化相操作

写在前面 本文主要针对使用GD&#xff08;兆易创新&#xff09;系列的FLASH做启动配置片时&#xff0c;遇到的相关问题进行简单整理复盘&#xff0c;避免后人踩坑。 本人操作固化芯片型号为&#xff1a;ZYNQ7045、690T&#xff08;复旦微替代型号V7 690T&#xff09;。 7系列…

02-waf绕过漏洞发现之代理池指纹被动探针

WAF绕过-漏洞发现之代理池指纹被动探针 思维导图 漏洞发现触发WAF点-针对xray工具&#xff0c;awvs工具等 1.扫描速度&#xff08;绕过方法&#xff1a;代理池&#xff0c;延迟&#xff0c;爬虫白名单&#xff09;2.工具指纹&#xff08;绕过方法&#xff1a;特征指纹&#x…

Qt Quick - Container

Qt Quick - Container使用总结 一、概述二、使用容器三、管理当前索引四、容器实现 一、概述 Container 提供容器通用功能的抽象基类。Container是类容器用户界面控件的基本类型&#xff0c;允许动态插入和删除Item。DialogButtonBox, MenuBar, SwipeView, 和 TabBar 都是继承…

测试工程师为什么要关注研发效能?

研发效能中的“研发”&#xff0c;指的是广义的研发团队&#xff0c;包含开发、测试、和研发团队内部的产品经理&#xff08;不包含业务部门的产品经理&#xff09;。测试工程师身处其中&#xff0c;作为研发团队的一员&#xff0c;对于整体的效能如何提升也应该了然于胸。这篇…

【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

0. 写在前面 常言道&#xff0c;科技论文犹如“八股文”&#xff0c;有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理&#xff0c;并不是为了提高或者润色一篇论文的表达。基本上所有的论文&#xff0c;都需要先构思好一些点子&#xff0c;有…

「计算机控制系统」5. 模拟设计法

模拟控制器的离散化 数字PID控制器 Smith预估控制 文章目录 模拟控制器的离散化数值积分法一阶后向差分法一阶前向差分法双线性变换法&#xff08;Tustin&#xff09; 零极点匹配法其他方法 数字PID控制器模拟PID控制器的离散化数字PID的改进PID控制各环节的作用PID参数的整定扩…

win11删除的文件不在回收站原因及找回文件方法

win11是微软最新推出的操作系统&#xff0c;它的外观和功能都有所升级。但是&#xff0c;在使用win11的过程中&#xff0c;有时候你会误删一些重要的文件&#xff0c;而这些文件并没有进入回收站&#xff0c;这该怎么办呢&#xff1f;win11删除的文件不在回收站怎么找回&#x…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始&#xff0c;构建RL的知识框架&#xff0c;熟悉关键名词和公式推导&#xff0c;扩展到Model-Free的Value-Based和Policy-Based方法&#xff0c;同时参考github的代码练习。接下来精读几篇经典论文&#xff0c;如DQN,PPO等。…