什么是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代码能运行,但是PyCharm画红线的问题

    原文:https://www.zhihu.com/question/63028700 PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者. Python有一个工作区的概念,在默认情况下,当你 ...

  2. python开发基础(二)运算符以及数据类型之tuple(元组)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  3. C++常见的面试题目整理

    本文列出C++面试中经常遇到的一些问题,都是一些常见的面试考点,如果后续遇到其他常见面试问题还会再次更新.希望对近期参加面试的同学有一些帮助.先后顺序与问题的重要性无关,查看的时候,最好是全面了解一下 ...

  4. kali xHydra使用

    简介: Hydra是一款登录爆破神器,Hydar几乎可以爆破各种协议的登录,比如windows的远程桌面.ssh.ftp.路由交换设备等等. Hydar在kali linux默认已经安装. 大概介绍一 ...

  5. 回流与重绘:CSS性能让JavaScript变慢?

    参考张鑫旭博客: http://www.zhangxinxu.com/wordpress/2010/01/%E5%9B%9E%E6%B5%81%E4%B8%8E%E9%87%8D%E7%BB%98%E ...

  6. quic是干什么的?

    什么是quic? quic解决了什么问题?HTTP和QUIC QUIC :Quick UDP Internet Connections:是一种新的默认加密的互联网通信协议,它提供了许多改进,旨在加速H ...

  7. C++ Split string into vector<string> by space(转)

    c++中没有这么方便的实现,但也有很多的方法能实现这个功能,下面列出五种常用的实现的方法,请根据需要选择,个人觉得前三种使用起来比较方便,参见代码如下: #include <vector> ...

  8. 自适应哈希索引(Adaptive Hash Index, AHI) 转

    Adaptive Hash Index, AHI 场景 比如我们每次从辅助索引查询到对应记录的主键,然后还要用主键作为search key去搜索主键B+tree才能找到记录. 当这种搜索变多了,inn ...

  9. intelx86为何从0xFFFF0处执行

    第一条指令的地址 在用户按下计算机电源开关之后,CPU会自动的将其CS寄存器设定为0xFFFF,将其IP寄存器设定为0x0000.由于CS:IP指出了下一条指令的地址[1],因此CPU会跳到0xFFF ...

  10. 系统运行后修改linux系统时区

    在网上看了很多改时间的帖子,都没能最终解决问题.最后还是下面的博客最终解决的时间的问题,感谢原作者 安装系统过程时没有选对当前的时区,即CST,Asia/Shanghai,而是按默认的,EDT时区,这 ...