jre、jdk、jvm之间的关系
很多Java的程序员在写了很多代码之后,你问他JRE和JDK是是什么关系,JVM又是什么东西,他是不知道的。
JVM(Java Virtual Machine)
Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,JVM 是 Java 能够跨平台的核心。
JRE (Java Runtime Environment)
Java 运行时环境。它主要包含两个部分,JVM的标准实现和 Java 的一些基本类库。它相对于 JVM来说,多出来的是一部分的 Java 类库。
JDK (Java Development Kit)
Java 开发工具包。JDK 是整个 Java 开发的核心,它集成了 JRE 和一些好用的小工具,例如javac.exe、java.exe、jar.exe 等。
显然这三者的关系是一层层的嵌套关系,即JDK > JRE > JVM。
为什么我们的电脑在装完JDK后会有两个版本的JRE?
留心的同学可能会发现,我们的JDK在安装成功后,在C:\Program Files\Java目录会是这样的(这里,我是装的JDK1.8的版本):

在Java根目录下有个JRE,在JDK目录下也有个JRE,那么这两个JRE之间有关系嘛?答案是没有的。甚至准确的来说,它俩是一样的,无论是用哪一个都是可以的。只是很多人习惯将会单独安装另一个JRE,虽然单独安装的JRE也并没有被使用,原因可能就是刚开始大家都不清楚JDK和JRE之间的关系,所以就默认的都安装上了。
在JDK的bin目录下,基本上都是一些可执行文件,并且它们还不大。其实这些可执行文件只是外层的一层封装而已,这样的目的是避免输入的命令过长。例如javac.exe内部调用的其实是JDK中lib目录中的tools.jar中com.sun.tools.javac.Main类,也就是说这些工具只是入口而已。而实际上它们本身又都是由Java编写的,所以在JDK目录下的JRE既提供了这些工具的运行时环境,也提供了我们编写完成的Java程序的运行时环境。
所以,很明显,JDK是我们的开发工具包,它集成了JRE ,因此我们在安装JDK的时候可以选择不再安装JRE而直接使用JDK中的JRE运行我们的Java程序。(但是大部分人都默认将两个都装上了)。但是如果你的电脑不是用来开发Java程序的,而仅仅是用来部署和运行Java程序的,那么完全可以不用安装JDK,只需要安装JRE即可。
Java为什么能跨平台,实现一次编写,多处运行(Once write, run anywhere)?
Java能够跨平台运行的核心在于JVM。不是Java能够跨平台,而是它的JVM能够跨平台。我们知道,不同的操作系统上操作的API肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的API写出不同的代码来完成动作。而Java引入了字节码的概念,JVM也只能认识字节码,并将它们解释到系统的API调用。针对不同系统有不同的JVM实现,有Linux版本的JVM实现,也有Windows版本的JVM实现,但是同一段代码在编译后的字节码是完全一样的。引用前面的例子,在Java API层面,我们调用系统声音设备的代码是一样的,和系统无关,编译后生成的字节码也是唯一的。但是对于同一段字节码,在不同的JVM实现上会映射到不同系统的API调用,从而实现代码的不加修改即可跨平台运行。
"把你的精力用在能得到回报的地方。"
jre、jdk、jvm之间的关系的更多相关文章
- JDK、JRE、JVM之间的关系
JDK.JRE.JVM之间的关系 1.JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...
- JDK、JRE与JVM之间的关系
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧: JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Env ...
- 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之间的关系-(转载)
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...
- java JVM JRE JDK三者之间的关系
JDK在包含JRE之外,提供了开发Java应用的各种工具,比如编译器和调试器. JRE包括JVM和JAVA核心类库和支持文件,是Java的运行平台. JVM是JRE的一部分,Java虚拟机的主要工作是 ...
- JDK、JRE、JVM之间的关系及JDK安装
JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 .JDK (Java Development Kit):是Java ...
- jvm内存模型-回收算法-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东面试题)
1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个 ...
- jvm内存模型-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东)
参考:JVM的垃圾回收机制 总结(垃圾收集.回收算法.垃圾回收器) 1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2) ...
随机推荐
- 一次业务网关用ASP.NET Core 2.1重构的小结
目录 前言 统一鉴权 服务限流 路由转发 参数重组 链路跟踪 熔断降级 服务计次 业务指标监控 日志记录 迭代更新 总结 前言 对于API网关,业界貌似对它进行下划分,有下面几个分类/场景. 面向We ...
- 用户和登录的ID、Name和SID
SQL Server的安全主体主要分为Login.User和Role,不仅有ID属性,还有Name属性和SID属性,SID是指Security ID.在查看用户和登录的时候,受到模拟上下文的影响.当执 ...
- Python线程与进程 I/O多路复用
SSHClient Paramiko模块 远程执行命令 #用户名密码方式: import paramiko ssh = paramiko.SSHClient() ssh.set_missing_hos ...
- java基础(15):常用API(Object、String、StringBuffer)
1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用 ...
- E203 CSR rtl实现分析
CSR状态控制寄存器,每个hart都有自己的CSR.对于每个hart,可以配置的状态寄存器是4k.CSR寄存器的功能见:https://www.cnblogs.com/mikewolf2002/p/1 ...
- postgreSQL数据库的初探
kali是黑客的强大武器,还有一个也是哦——Metasploit postgreSQL数据库是Metasploit的默认数据库哦! 启动postgresql: service postgresql s ...
- SAP MM 有了采购订单历史的PO行项目里的采购附加费不允许再改了?
SAP MM 有了采购订单历史的PO行项目里的采购附加费不允许再改了? 正确答案是: 不允许,这是SAP标准逻辑. 那么问题来了!今日收到业务人员报说采购订单4300013979,完成了收货和IV, ...
- Android8.1源码编译实践(Mac)
第0步:版本选择 AOSP版本选择很重要,如果选错了,会造成编译失败等各种问题,编译AOSP对Xcode的版本是有要求的: 比如:AOSP6.0-7.0,要求Xcode的版本是8.3,然而在MacOS ...
- rocksdb和leveldb的bloom filter比较
memtable中的bloom filter rocksdb在memtable中添加了prefix bloom filter,就是对key取prefix,然后把这个prefix加入到bloom fil ...
- 查看UNDO 表空间使用情况
Select Sum(bytes / (1024 * 1024)), a.status From dba_undo_extents a Group By a.status Select fi ...