JDK、JRE 和 JVM 有什么用,它们是怎样运行的
JDK如何运作?
JDK 功能
以下是JDK的重要组件:
- JDK 和 JRE:程序员通过使用JDK 创建由 JRE 运行的 Java 程序,其中包括 JVM 和类库。
- 类库:是一组可动态加载的库,Java 程序在运行时调用。
- 编译器:是一个Java程序,开发人员的文本文件通过编译器编译成Java类文件。编译器给出的常见输出形式,包含Java字节码。在 Java 中,主要的编译器是 Javac。
- 调试器:调试器是一个 Java 程序,开发人员通过调试器测试和调试 Java 程序。
- JavaDoc: JavaDoc 是 Sun Microsystems 为 Java 制作的文档。JavaDoc 可用于从源程序生成 HTML 文件中的 API 文档
JRE如何运作?
JRE 功能
JRE 有一个 JVM 实例、库类和开发工具。编写和编译 Java 代码后,编译器会生成一个包含字节码的类文件。
以下是 JRE 的重要组成部分:
- 类加载器:类加载器加载运行 Java 程序所需的各种类。JVM 使用三个类加载器,称为引导类加载器、扩展类加载器和系统类加载器。
- 字节码验证器:字节码验证器验证字节码,使代码不会干扰解释器。
- 解释器:一旦加载类并验证代码,解释器就会逐行读取代码。
- 运行时间:运行时间是主要用于编程的系统,用于描述特定程序运行的时间段。
- 硬件:一旦你编译了 Java 本机代码,它就会在特定的硬件平台上运行。
这样,Java 程序就在 JRE 中运行。
JVM如何运作?
JVM 功能
以下是 JVM 的重要组件:
1) 类加载器
类加载器是用于加载类文件的子系统。它执行三个主要功能:加载、链接和初始化。
2) 方法区
JVM 方法区存储类的结构,如元数据、Java 方法的代码和常量运行时池。
3) 堆
所有对象、数组和实例变量都存储在堆中。此内存在多个线程之间共享。
4)JVM语言栈
Java 语言堆栈存储局部变量及其部分结果。每个线程都有自己的 JVM 语言堆栈,在创建线程时同时创建。调用方法时会创建一个新框架,并在方法调用过程完成时将其删除。
5) PC 寄存器
PC 寄存器存储当前正在执行的 Java 虚拟机指令的地址。在 Java 中,每个线程都有其单独的 PC 寄存器。
6) 原生方法栈
本机方法栈保存本机代码的指令依赖于本机库。它在本机堆上分配内存或使用任何类型的堆栈。
7) 执行引擎
它是一种用于测试软件、硬件或完整系统的软件。测试执行引擎从不携带任何关于被测产品的信息。
8) 原生方法API
本机方法接口是一个编程框架。它允许在 JVM 中运行的 Java 代码由库和本机应用程序调用。
9) 原生API库
本机库是执行引擎所需的本机库(C、C++)的集合。
JDK、JRE 和 JVM 的区别
以下是 JDK、JRE 和 JVM 之间的主要区别:
| JDK | JRE | 虚拟机 |
| JDK 英文全称是 Java Development Kit。 | JRE 英文全称是 Java 运行时环境。 | JVM英文全称是Java虚拟机。 |
| JDK 是一个用 Java 开发应用程序的软件开发工具包。 | 它是一个软件包,为 Java 类库提供运行 Java 代码所需的组件。 | JVM 执行 Java 字节码并提供执行它的环境。 |
| JDK 依赖于平台。 | JRE 也依赖于平台。 | JVM 高度依赖于平台。 |
| 它包含用于开发、调试和监控 Java 代码的工具。 | 它包含 JVM 执行程序所需的类库和其他支持文件。 | JVM 中不包含软件开发工具。 |
| 它是 JRE 的超集 | 它是 JDK 的子集。 | JVM 是 JRE 的子集。 |
| JDK 使开发人员能够创建可由 JRE 和 JVM 执行和运行的 Java 程序。 | JRE 是创建 JVM 的 Java 部分。 | 它是执行源代码的 Java 平台组件。 |
| JDK 附带安装程序。 | JRE 只包含执行源代码的环境。 | JVM 捆绑在软件 JDK 和 JRE 中。 |
| JDK 附带安装程序。 | JRE 只包含执行源代码的环境。 | JVM 捆绑在软件 JDK 和 JRE 中。 |
JDK、JRE 和 JVM 有什么用,它们是怎样运行的的更多相关文章
- Difference between JDK, JRE and JVM
With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...
- java学习之Java中JDK,JRE和JVM之间的关系(转载)
最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的 ...
- Java中JDK,JRE和JVM之间的关系
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...
- Java基础知识 ——JDK,JRE和JVM
1.开发简单的Java程序过程: 名词解释: JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行 ...
- Java中JDK,JRE和JVM之间的关系-(转载)
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...
- JAVA语言的跨平台性和JDK,JRE与JVM
Java虚拟机--JVM ~JVM:java虚拟机简称JVM是运行所有java程序的假想计算机,是java程序的运行环境,是java最具有吸引力的特性之一,我们编写的java代码,都运行在JVM之上 ...
- 【java】JDK、JRE、JVM的关系
目录结构: contents structure [-] 什么是JDK,JRE,JVM 安装JDK的时候为什么有两个jre 专用JRE 共用JRE 共用JRE和专用JRE的对比 java的跨平台特性 ...
- 认识JDK、JRE、JVM
JDK.JRE.JVM之间的关系: 首先看看JDK与JRE的区别与联系,如下图所示: 由图可知: JDK = JRE + Tools&Tool APIs JDK的核心是Java SE API. ...
- 关于你天天见到的JDK、JRE和JVM
什么是JDK.JRE.JVM? 大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言.这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序 ...
- JDK,JRE,JVM,三者的区别于联系?
万事开头难,从基础抓起! 下载JDK官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK:Java Dev ...
随机推荐
- FastDFSJava客户端使用
1.1.java客户端 余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知.而且已经很久不维护了. 这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot ...
- hdfs文件导入到hive(带资源)
前言 hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载,这是一种可以存储.查询和分析存储在Hadoop中的大规模数据的机制.hive数据仓库工具能将结构化的数据文件映射为一张 ...
- 基于华为云服务器的FTP站点搭建
前言 主要介绍了华为云上如何使用弹性云服务器的Linux实例使用vsftpd软件搭建FTP站点.vsftpd全称是"very secure FTP daemon",是一款在Linu ...
- 【问题排查过程】vm-backup的snapshots导致磁盘满
使用中发现,vm-storage节点仅仅过了6天,就占用了800GB的硬盘空间.很不正常.下面是排查过程: 1.查看磁盘占用情况: 先登录容器,执行: df -h /dev/vdb 1012.8G 8 ...
- 【记录一个问题】linux下使用opencv中的UMat,性能并未提升,反而略有下降
使用后性能略微下降,一开始怀疑是UMat拷贝的问题.运行 nvidia-smi -l 1, 发现GPU占用始终为0.说明opencl使用的是CPU版本,而不是GPU版本.明天试验opencl的GPU版 ...
- 嵌入式硬件之ADC/DAC
嵌入式硬件之ADC/DAC 写在前面 这几天在做一个寒假练项目,其中涉及到了音频的处理,ADC.DAC再次进入到了我的视野,并引起了我新的思考. 1.初次相识 记得去年七月份,本科毕业刚离校,就到研究 ...
- while...break 实例
// 输出1-100内前5个可以被3整除的数 public class Demo { public static void main(String[] args) { int num = 0; for ...
- 什么是协程(第三方模块gevent--内置模块asyncio)
目录 一:协程 1.什么是协程? 2.携程的作用? 3.安装第三方模块:在命令行下 二:greenlet模块(初级模块,实现了保存状态加切换) 三: gevent模块(协程模块) 1.time 模式协 ...
- Element Plus 正式版发布啦!🎉🎉
今天,我们非常高兴地宣布 Element Plus 稳定版正式发布.自第一个 commit 起,经过 1 年零 7 个月的持续迭代开发,总计 2635 commits,经过 256 位贡献者所提交的 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(5) —— 实现Query过滤功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 对于查询来说,还有一大需求是针对查询的数据进行过滤,本篇文章我们准备实现GraphQL中基本的查询过滤. 思 ...