0cc3f4a15d3184391a98a7b1c58f6e5f_1440w20171221220833133

先给出JDK,JRE,JVM(带上JVM有助于理解)的名词解释

  1. Java开发工具包(JDK)是一种用 于开发Java应用程序和applet的软件开发环境。它包括Java运行时环境(JRE)、解释器/加载器(Java)、编译器(javac)、归档器(jar)、文档生成器(Javadoc)和Java开发所需的其他工具。
  2. JRE代表“Java Runtime Environment”,也可以写成“Java RTE”。Java Runtime Environment提供了执行Java应用程序的最低要求;它由Java虚拟机(JVM)、核心类和支持文件组成。
  3. 另外也给出了JVM(java virtual machine)的解释。
  • 它是一种指定Java虚拟机工作的规范。但是实现提供者对算法的选择是独立的。它的实现由Sun和其他公司提供。
  • 满足JVM规范要求的计算机程序的一种实现。
  • 运行时实例:每当您在命令提示符下编写java命令来运行java类时,就会创建一个JVM实例。

一. JDK、JRE和JVM的区别

为了理解这三者之间的区别,让我们考虑下面的图表。

img

  • JDK–Java开发工具包(简称JDK)是一种提供开发和执行(运行)Java程序的环境的工具包。JDK是一个工具包(或包),它包括两个方面
  1. 开发工具(提供开发java程序的环境)
  2. JRE(执行java程序)。
  • JRE–Java Runtime Environment(也就是说JRE)是一个安装包,它提供的环境只能在您的计算机上运行(而不是开发)Java程序。只有那些只想运行Java程序的用户,也就是系统的最终用户,才会使用JRE。
  • JVM–Java虚拟机(JVM)是JDK和JRE的一个非常重要的部分,因为它内置于两者之中。使用JRE或JDK运行的任何Java程序都进入JVM,JVM负责逐行执行Java程序,因此它也被称为解释器。

二. JRE和JDK是如何工作的?

JRE由什么组成?

JRE由以下组件组成:

  • 部署技术,包括部署、java web start和Java插件。
  • 用户界面工具包,包括抽象窗口工具包(AWT)、Swing、java2d、辅助功能、图像I/O、打印服务、声音、拖放(DnD)和输入方法。
  • 集成库,包括接口定义语言(IDL)、Java数据库连接(JDBC)、Java命名和目录接口(JNDI)、远程方法调用(RMI)、Internet Orb间协议远程方法调用(RMI-IIOP)和脚本。
  • 其他基本库,包括国际支持、输入/输出(I/O)、扩展机制、bean、Java管理扩展(JMX)、Java本机接口(JNI)、数学、网络、覆盖机制、安全性、序列化和Java for XML处理(XML JAXP)。
  • Lang和util基本库,包括Lang和util、管理、版本控制、zip、工具、反射、集合、并发实用程序、Java存档(JAR)、日志、首选项API、Ref对象和正则表达式。
  • Java虚拟机(JVM),包括Java HotSpot 客户端和Server Virtual Machines

JRE是如何工作的?

为了理解JRE是如何工作的,让我们保存一个java源文件Example.java。该文件被编译成一组字节码,存储在“.class”文件中,这里它就是”Example.class“。

imgimg

下图描述了编译时所做的操作,以下操作在运行时发生:

  • 类加载器

类加载器加载执行程序所需的所有类。它通过将本地文件系统的名称空间与通过网络导入的名称空间分离来提供安全性。这些文件可以从硬盘、网络或其他来源加载。

  • 字节码校验器

JVM将代码放入字节码验证器,该验证器检查格式并检查非法代码。例如,非法代码就是违反对象访问权限或违反指针实现的代码。

字节码验证器确保代码符合JVM规范,并且不违反系统完整性。

img

  • 解释器

在运行时,字节码由解释器加载、检查和运行。解释器有以下两个功能:

  1. 执行字节码
  2. 对底层硬件进行适当的调用

两种操作可以显示为:

img

要理解JDK和JRE之间的交互,请考虑下面的图:

img

三. JVM是如何工作的?

JVM在Java程序运行时成为JRE的一个实例。它被广泛地称为运行时解释器。JVM在很大程度上有助于从程序员那里抽象出内部实现,这些程序员为自己的程序使用JDK中的库。