什么是JDK、JRE、JVM?

大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言。这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序翻译成电脑可以识别的程序,C或者汇编。

所以我们在安装配置Java运行环境的时候,就把这个翻译官给添加进去了,就是我们的JDK

那么程序在运行的时候,整个的流程是这样的:

  1. 书写Java源程序(.java)

  2. JDK将源程序编译成字节码文件(.java --> .class)

  3. JRE(运行环境)将字节码进行解释,并执行命令

  4. 字节码文件(.class)中的指令变为对应操作系统的机器码

  5. 操作系统执行命令

整个的JDK构成如下图所示:

那么,最下面的JVM是干嘛的?

java虚拟机(Java Virtual Machine,简称JVM),即java虚拟机,由上面的图示可以知道,JVM是整个java架构当中最为底层的存在,它直接与操作系统进行对接,为 java运行时的环境制定规则,是一种面向计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar:rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包),Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

那么,包含JVM的JRE又是干嘛的?

Java运行环境(Java Runtime Environment,简称JRE)是指运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

它包括两部分:java运行环境(JavaRuntimeEnvironment)和java插件运行环境(JavaPlug-inJavaRuntimeEnvironment),是一个可以在其上运行、 测试和传输应用程序的Java平台。

由上面的图示可以看得出来,JRE包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具——编译器、调试器和其它工具。JRE中不仅存在着JVM,还有着lang and util base librariesOther Base Libraries等各种基础工具类,以及JDBCIDLRMI等底层的数据接口,还有一些用户封装的接口开发工具,如SwingJava 2D 等。这些各种各样的工具和基础接口组成了JAVA运行时的环境。

JRE需要辅 助软件——JavaPlug-in——以便在浏览器中运行applet.J2RE是Java2 Runtime Environment,即Java运行环境,有时简称JRE.如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK.

知道了JVM、JRE,那么我们安装的JDK是干什么用的?

JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK.最主流的 JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket, 还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。

JDK一共有三种版本:

  • SE(J2SE):standard edition,标准版,最通用的一个版本。
  • EE(J2EE):enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序。
  • ME(J2ME):micro edtion,主要用于移动设备、嵌入式设备。

JDK的7个主要应用程序:

  1. Javac:Java编译器,将Java源代码转换成字节码。
  2. Java:Java解释器,直接从类文件执行Java应用程序字节代码。
  3. appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
  4. Javadoc:根据Java源码及说明语句生成HTML文档。
  5. Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。
  6. Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
  7. Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

关于你天天见到的JDK、JRE和JVM的更多相关文章

  1. 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 ...

  2. java学习之Java中JDK,JRE和JVM之间的关系(转载)

    最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的 ...

  3. Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  4. Java基础知识 ——JDK,JRE和JVM

    1.开发简单的Java程序过程: 名词解释: JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行 ...

  5. Java中JDK,JRE和JVM之间的关系-(转载)

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  6. JAVA语言的跨平台性和JDK,JRE与JVM

    Java虚拟机--JVM ~JVM:java虚拟机简称JVM是运行所有java程序的假想计算机,是java程序的运行环境,是java最具有吸引力的特性之一,我们编写的java代码,都运行在JVM之上 ...

  7. 【java】JDK、JRE、JVM的关系

    目录结构: contents structure [-] 什么是JDK,JRE,JVM 安装JDK的时候为什么有两个jre 专用JRE 共用JRE 共用JRE和专用JRE的对比 java的跨平台特性 ...

  8. 01-01java概述 doc命令、jdk\jre下载安装、path、classpath配置、开发中常见小问题

    1:计算机概述(了解) (1)计算机 (2)计算机硬件 (3)计算机软件 系统软件:window,linux,mac 应用软件:qq,yy,飞秋 (4)软件开发(理解) 软件:是由数据和指令组成的.( ...

  9. JDK,JRE,JVM,三者的区别于联系?

    万事开头难,从基础抓起! 下载JDK官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK:Java Dev ...

随机推荐

  1. 华为云FusionInsight湖仓一体解决方案的前世今生

    摘要:华为云发布新一代智能数据湖华为云FusionInsight时再次提到了湖仓一体理念,那我们就来看看湖仓一体的来世今生. 伴随5G.大数据.AI.IoT的飞速发展,数据呈现大规模.多样性的极速增长 ...

  2. 容器探针(liveness and readiness probe)

    一.为什么需要容器探针 如何保持Pod健康   只要将pod调度到某个节点,Kubelet就会运行pod的容器,如果该pod的容器有一个或者所有的都终止运行(容器的主进程崩溃),Kubelet将重启容 ...

  3. Linux 系统编程 学习:10-线程:线程的属性

    Linux 系统编程 学习:10-线程:线程的属性 背景 上一讲我们介绍了线程的创建,回收与销毁:简单地提到了线程属性.这一讲我们就来具体看看,线程的属性. 概述 #include <pthre ...

  4. uniApp 列表

    普通列表 例图: 代码片段: <template> <view class="teacher"> <view class="teacher- ...

  5. 响应式编程简介之:Reactor

    目录 简介 Reactor简介 reactive programming的发展史 Iterable-Iterator 和Publisher-Subscriber的区别 为什么要使用异步reactive ...

  6. MapReduce在Shuffle阶段按Mapper输出的Value进行排序

    ZKe ----------------- 在MapReduce框架中,Mapper的输出在Shuffle阶段,根据Key值分组之后,还将会根据Key值进行排序,因此Reducer的输出我们看到的结果 ...

  7. 没有磁盘空间 No space left on device

    INSTALL 的解释文件 帮助文件 这里的 pytorch=1.0.1 torchvision=0.2.2 cudatoolkit=9.0,这个ATSS可以运行. 这里最好能够查看一下cuda的版本 ...

  8. 随笔1.流程控制--if

    # 流程控制--if `-*- coding:utf-8 -*- #定义字符编码`## 1.判断条件if```python age = input("输入年龄:") #将交互式输入 ...

  9. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  10. 使用 .NET 5 体验大数据和机器学习

    翻译:精致码农-王亮 原文:http://dwz.win/XnM .NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验.微软发布了与 .NET 协作的大数据(.NET ...