java之JDK 、JRE、JVM

java之JDK 、JRE、JVM

简单了解

JDK包含JRE,JRE包含JVM。

JDK简单理解就是Java开发工具包,JRE是Java的运行环境,JVM是Java虚拟机。

JDK是面向开发者的,JRE是面向使用JAVA程序的用户。

详解

  • **JDK:**java development kit(java开发工具包)

    JDK是整个JAVA的核心,包括了Java运行环境(JRE),JAVA工具(JAVAC/JAVA/JDB等)和JAVA基础类库(即JAVA API 包括 rt.jar)。

    • java工具

      • **javac:**java编译器,将java源代码编译成可执行的字节码(二进制码)。
      • java: java解释器,直接从类文件执行java应用程序字节码。
      • **appletviewer:**小程序浏览器,一种执行HTML文件上的java小程序的java浏览器。
      • **javadoc:**根据java源代码及说明语句生成HTML文档。
      • **javah:**产生可以调用java过程的C过程,或建立能被java程序调用的C过程的头文件。
      • **javap:**java反编译器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
    • java基础类库

      • **java.applet:**提供创建applet小程序所需要的类。
      • **java.awt:**包含用于创建用户界面和绘制图形图像的所有类。
      • java.io:提供与输入输出相关的类。
      • **java.beans:**包含于开发javaBeans相关的类。
      • **java.lang:**提供java语音程序设计的基础类。
      • java.net:提供实现网络操作相关的类。
      • **java.nio:**为输入输出提供缓冲区的类。
      • **java.text:**提供处理文本、日期、数字和消息的类和接口。
      • **java.util:**提供处理日期、时间、随机数生成等各种使用工具的类。
      • javax.net:提供用于网络应用程序的类、网络应用扩展类。
      • **java.swing:**提供一组与AWT功能相同的纯java的组件类。

      JDK有以下三种版本:

      • ***javaSE:***标准版,基于个人计算机的应用。
      • ***javaME:***微型版,消费型电子产品。(不常用)
      • ***javaEE:***企业版,定位在服务器端的应用。(包含JavaSE)
  • **JRE:**Java Runtime Enviromental(java运行时环境)

    JRE也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。

  • **JVM:**Java Virtual Mechinal(JAVA虚拟机)

    JVM是JRE的一部分,它是一个虚拟出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

    JVM是Java实现跨平台最核心的部分,所有的Java程序会首先被编译为.class的类文件,JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java面对不同操作系统使用不同的虚拟机,依次实现了跨平台。JVM对上层的Java源文件是不关心的,它关心的只是由源文件生成的类文件。

下图很好的表面了JDK,JRE,JVM三者间的关系:

java之JDK 、JRE、JVM

我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。