JDK,JRE,JVM区别与联系 Java为什么跨平台 ?为什么一次编写,到处运行?

来源:互联网 发布:sound软件 编辑:程序博客网 时间:2024/06/10 01:08

开篇

你将学到

  • JDK
  • JRE
  • JVM
  • 以上三者的区别及联系
  • Java为什么跨平台
  • 一次编写,到处运行?

先看重点总结

  1. 不同平台上 JVM 是不同的,JVM屏蔽了平台的差异, JVM 提供了一个不依赖于底层OS和机器硬件的接口,这正是一次编写,到处运行的原因
  2. JVM的主要工作职责是解释自己的指令集(字节码)并映射到本地的CPU的指令集或者OS的系统调用。
  3. 我们平时的开发情况是:利用JDK(调用Java API)开发自己的Java程序,通过JDK中编译程序(javac , 也许你会说,我平时根本没用呀?那是因为我们的IDE都帮我们集成好了)将我没呢的 Java 文件编译成 字节码,在JRE上运行。JVM 解析字节码,映射CPU指令集或OS的系统调用。

详细阅读

JDK

JDk (Java Development ToolKit, Java 开发工具包)。

JDK是整个Java的核心,包括Java运行环境(Java Runtime Environment),Java工具(javac、javac、jdb等)和Java基础的类库。

JRE

JRE (Java Runtime Environment,Java运行环境)。

所有的Java程序都要在JRE下运行。JRE包括JVM、Java核心类库和支持文件。

与JDK想比,它不包含编译器、调试器之类的之类的开发工具。

如果你只想运行Java程序,只需安装JRE即可,不必安装JDK。

JVM

JVM(Java Virtual Mechinal,JAVA虚拟机)。

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

JVM之所以被成为“虚拟机”,是因为他提供了一个不依赖于底层OS和机器硬件的接口,这正是一次编写,到处运行的原因。

JVM 对上层的Java源文件并不关心,它关注的只是有源文件生成的类文件(class file),类文件的组成包括JVM指令集,符号表及一些补助信息。

JVM是干什么的呢?

JVM的主要工作职责是解释自己的指令集(字节码)并映射到本地的CPU的指令集或者OS的系统调用。

为什么 JVM 跟Java的跨平台特性息息相关?

因为不同的操作系统使用不同的 JVM 映射规则, 让其与操作系统无关。

虽然java程序生成的字节码文件是相同的,但 不同的平台的虚拟机不同,就是导致不同平台上的不同虚拟机的映射原则不一样。

可以说,JVM屏蔽了平台的差异。

JDK,JRE,JVM区别与联系

  • JDK 包括JRE,可以说JDK是JRE的超集
  • JRE 包括 JVM 。 JVM 是 JRE 的一部分
  • 我们平时的开发情况是:利用JDK(调用Java API)开发自己的Java程序,通过JDK中编译程序(javac , 也许你会说,我平时根本没用呀?那是因为我们的IDE都帮我们集成好了)将我没呢的 Java 文件编译成 字节码,在JRE上运行。JVM 解析字节码,映射CPU指令集或OS的系统调用。

JDK,JRE,JVM区别与联系用一张图足以说明:

java平台

如何理解“一次编写,到处运行”,即 Write Once and Run Anywhere(WORA)?

关于java的跨平台特性,我想用两句话概述下,就是

  1. 执行的是字节码(bytecode),而不是二进制码。
  2. 不同平台上 JVM 是不同的,JVM屏蔽了平台的差异

如何理解WORA?

Write Once.java程序编译一次,即可生成对应的字节码文件(.class文件),只要有虚拟机,此字节码文件就能运行,而不管所在的环境是什么样的。
Run Anywhere.就是可以到处运行。但不同的平台的虚拟机不同,由于java程序生成的字节码文件是相同的,不同平台上的不同虚拟机的映射原则不一样,可以说,JVM屏蔽了平台的差异。看下图:

不同平台下的执行

阅读更多

  • JDK, JRE 和JVM的区别
  • JDK,JRE,JVM区别与联系
  • Platform Independent
  • JVM (Java Virtual Machine)
  • Difference between JDK, JRE and JVM
1 0