辨析ADK&JVM&JRE&JDK&ADT
一、SDK
英文全称:Software Development Kit
中文译名:软件开发工具包
详解:
- 由第三方服务商提供的实现软件产品某项功能的工具包。
- 为了扩展软件功能或其它方面而设计出来给开发人员使用的工具包,利用这工具包可设计出特有的程序。如:DirectX8 SDK可设计游戏,J2SE 1.4可设计Java程序等等。
- 一般是指软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
- 软件开发工具包广义上指辅助开发某一类软件的相关文档、范例和工具的集合。 比如在游戏开发中,就包含有很多的sdk。 再如,开发安卓应用时,也都需要下载安装Android SDK。
二、JVM
英文全称:Java Virtual Machine
中文译名:Java虚拟机
详解:
- JRE的一部分
- 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
- JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。
- Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。所以说,JVM是整个Java实现跨平台的最核心的部分。
- Java程序首先会被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file)。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
- JVM通过抽象操作系统和CPU结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM的实现也是互不相同的,比如垃圾回收算法,线程调度算法(可能不同 OS 有不同的实现)。
三、JRE
英文全称:Java Runtime Environment
中文译名:Java运行环境,Java平台
详解:
- 包含JVM
- 正如鱼儿离不开水一样,Java程序的运行也离不开JRE。即Java程序只有在JRE下才能运行。
- 单单一个JVM还不能执行.class,因为在解释.class的时候,JVM需要调用解释所需要的类库lib。 在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在 这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib合起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件 和jre一起打包发给朋友,这样你的朋友就 可以运行你写程序了。(jre里有运行.class的java.exe)
- JRE里面就有一个JVM 。因为JRE与具体的CPU结构以及操作系统有关,所以我们下载JRE的时候就看到了对应不同系统的多种版本。同JVM一起组成JRE的还有一些API(如 awt, swing 等)。JRE包括JVM和Java核心类库和支持文件。
- 与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
四、JDK
英文全称:Java Development Kit
中文译名:Java开发工具包
详解:
- 包含JRE
- 面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。
- 一种用于构建在Java平台上发布的应用程序、applet 和组件的开发环境。其中包括了Java编译器、JRE、大量的Java工具(javac/java/jdb等)以及Java基础的类库(即Java API, 里面是Java类库和Java的语言规范)。它不提供具体的开发软件,它提供的是无论你用何种开发软件写Java程序都必须用到的类库和Java语言规范。
- 我们常常用JDK来代指Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形,网络和文件I/O等等 ,我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。
- JDK的三种版本: J2EE、J2SE、J2ME。它们的共同点是——语言是相同的,而捆绑的库不同。J2EE是企业版平台,它除了包含标准版SE的任何组件,还增加了附加库;J2SE是标准版平台,使用这种JDK开发J2EE应用程序;J2ME是微型平台,主要用于移动设备、嵌入式设备上的java应用程序。
- JDK的安装目录下面有六个文件夹、一个src类库源码压缩包和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。bin——最主要的是编译器(javac.exe);include——Java和JVM交互用的头文件;lib——类库;jre——Java运行环境 (注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现它们只要求你选中jre路径就ok了。
五、ADT
英文全称:Android Development Tools
中文译名:安卓开发工具
附录——JVM、JRE、JDK三者联系
Java 喊出的带有标志性的口号“ Write Once , Run Anywhere (一次编写,到处运行)”,正是建立在 JRE 的基础之上。何以实现?就是在 Java 应用程序和操作系统之间增加了一虚拟层—— JRE 。
程序源代码不是直 接编译、链接成机器代码,而是先转化到字节码( bytecode ) 这种特殊的中间形式,字节码再转换成机器码或系统调用。前者是传统的编译方法,生成的机器代码就不可避免地跟特殊的操作系统和特殊的机器结构相关。
而 Java 程序的字节码文件可以放到任意装有 JRE 的计算机运行,再由不同 JRE 的将它们转化成相应的机器代码,这就实现了 Java 程序的可移植性。这样程序员也不用去 关心程序运行的具体环境,而可以专心编写软件。这种分层抽象、隐藏细节的思想在计算机科学中处处可见,比如机器组织结构的设计、网络协议的实现等。 Pascal 语言的发明者 Niklaus Wirth ,就富有预见性地指出应该有这样一种可移植的语言,其生成的中间代码可以在一台假想的机器( a hypothetical machine )上运行。
而 Java 虚拟机( Java virtual machine 或 JVM )就是这样的一台机器,它模拟实际处理器的结构,解释字节码。 怎么一会说是 JRE ,一会儿又成了 JVM ,两者是否同物不同名? 回答是否定的。
JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
要运行Applet,在客户端必须安装有 JRE,即“运行时”,容易一点理解,就象所谓的“插件”,要开发JAVA应用程序\Web应用,就必须在服务器端安装相应的 JVM+JDK 了(开发应用 Java web应用 时,客户端不需要安装任何的JVM)
如果你使用JAVA开发应用,就需要安装 JRE+JDK,就是 J2SE.
如果在客户端运行Applet,客户端浏览器必须嵌有JAVA JVM,如果没有,就需要安装,即: 在客户端创建JRE(运行时,包含JVM),而客户端是不需要做开发的,所以,JDK就没有必要安装了。
不同版本的Applet在不同的JVM下可能无法正常运行,而Microsoft JVM只是Sun JVM的“低版本”,微软在windows xp/2003中干脆将JVM去掉了。