什么是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. Python常用组件、命令大总结(持续更新)

    Python开发常用组件.命令(干货) 持续更新中-关注公众号"轻松学编程"了解更多. 1.生成6位数字随机验证码 import random import string def ...

  2. 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】

    网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的. 首先我们来看看 TCP 协议的三次握手过程 如上图所示: 解释一下里面的英文: 里面起到作用的一些标志位就是TCP报文首部里的 ...

  3. hashmap源码面试分析

    HashMap源码问题解析 问: 说一说对hash的理解 答: hash是对任意长度的输入输出为相同长度的输出 问: hash算法的问题 答: hash冲突问题 问: hash冲突是否可以避免 答: ...

  4. NOIP/CSP-S 考前注意事项

    NOIP/CSP-S 考前注意事项 实际操作与代码注意事项 基本内容 可以使用 #include <bits/stdc++.h>!!!从来都是可以的!!!不需要背诵一大串头文件,更不要从本 ...

  5. 数据结构 - 二叉树的遍历(递归VS非递归)

    import java.util.LinkedList; public class BinaryTree { public static void main(String[] args) { int ...

  6. Java每日一考202011.4

    1.JDK,JRE,JVM三者之间的关系 JDK包含JRE,JRE包含JVM JDK=JRE+JAVA的开发工具 JRE=JVM+JAVA核心类库 2.为什么要配置环境变量? 希望在任何路径下都能执行 ...

  7. 多服务器使用Docker设置一主一从三哨兵redis(完整)

    本来应该续之前那篇博客Docker配置redis哨兵模式--多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够 ...

  8. 错误C3646“name”: 未知重写说明符 问题

    在用多文件编译来写一个程序时,遇到了一个错误: 错误C3646"name": 未知重写说明符 于是我就去某搜索引擎上搜索一下前辈们对这个错误的心得 综合网上的经验我总结了一下出现这 ...

  9. 经典c程序100例==81--90

    [程序81] 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数.求??代表的两位数,及809*??后的结果. 1.程序分析: 2.程 ...

  10. 强迫自己学习Jquery 最喜欢的hitch函数

    用过dojo的人都知道hitch. 通过绑定一个函数的上下文得到一个新函数,当然还能绑定参数 Jquery里没有这个功能,实在太不方便了. 这是我不喜欢用Jquery的第一原因,第二原因是Jquery ...