Windows中的JDK和Linux中的JDK是否相同

前言

在面试中,被问到了一个问题:

Windows中的JDK和Linux中的JDK是否相同?

其实,以上这个问题是一个子问题。原本的问题是:如何理解Java的跨平台机制。由于原问题显得有些宽泛,因此延伸出一个子问题,在本篇博客中争取能够完整地回答。
本文力求建立起自己知识体系中Java的基石,希望在阅读本文之后,同时可以很好地回答上述的跨平台机制这个基础问题。

一、JDK的架构

下面这张是从Oracle官方文档中找到的JDK架构图,非常细致的展现了JDK每个层级的架构和组件。以下将会挑选重点,谈谈自己的理解。

 

JDK

首先我们来看JDK的组成,总的来说,JDK包括两部分:

  • 第一部分是Tools & Tool APIs,这包括了将java文件编译成为class文件的工具,比如javac,java,还有调试java程序的各种工具;
  • 第二部分是JRE,JRE是Java的运行时环境,被编译后的java程序,就是在JRE中得到执行。

由于本文只想要分析JDK、JRE等比较宏观的相关概念,所以可以将上面的复杂的JDK架构图简化,得到下面一张简图。 从中可以很好的看到JDK、JRE和JVM的架构关系。

 

 

JRE

JRE是Java的运行时环境,总的来看,包括三部分内容:

  • 首先是java的class文件或者是java的package,这些class文件和package有时需要和被编译后的java程序一起,得到执行;
  • 第二是java运行时的库文件,例如rt.jar,有了库文件的支持,被编译后的java文件才能得到正确的执行;
  • 第三是JVM。JVM是Java虚拟机,是真正执行Java程序的地方。它使用了第一部分的java的class和第二部分的库文件来实际运行Java程序。不同的操作系统或者平台中,JVM是不同的。

看到这里,相信已经可以回答文章开头提出的问题了。Windows中的JDK和Linux中的JDK是否相同?回答是,不相同的!

JVM

JVM是Java虚拟机,是Java程序真正得到执行的地方。不同的操作系统或者平台中,JVM是不同的。这也就是为什么Oracle的官网上提供了不同平台的JDK给用户下载。

二、Java程序的编译和执行

下面从JDK,JRE等角度,来简略的描述Java程序编译和执行的流程。流程图如下所示:

  1. Java源代码,也就是java文件,首先会被JDK编译,具体来说,是被JDK中的Java Compiler编译了,然后就会生成Java字节码(Java Bytecode),这个Bytecode,就是class文件。
  2. Bytecode会被传输到JVM中,JVM会使用JRE中的java class和库文件与Bytecode一起编译执行。
  3. 所谓的编译执行,其实质上还是编译的过程,也就是说,JVM接收的输入是Java Bytecode,处理后的输出是基于特定平台和操作系统的机器码,这里说的机器码,也可以被认为是一组指令集。
  4. 可以看到在JVM中,有一个橙色的框,是JVM中包含的JIT Complier。JIT Compiler的作用是,对Java Bytecode中的部分字节码进行优化,这样可以生成更高效的机器码,被底层的物理硬件执行。

 

总结

写到这里,可以对“Windows中的JDK和Linux中的JDK是否相同”,或者“如何理解Java的跨平台特性”,进行回答。

  • Java平台的跨平台特性,从最基础的角度来说,是因为JVM。不同操作系统或者平台上的JVM是不同的,因为JVM要把Java字节码编译成为机器码,机器码才是真正物理硬件执行的指令集。由于不同操作系统或者平台的硬件架构不同,所以必须制作不同的JVM,安装在不同的操作系统或者平台上。
  • 看到一位网友的总结,觉得很好:正是因为JVM的不跨平台特性,才实现了Java语言的跨平台特性。
  • Java的概念中,有“一次编写,到处运行”,即“Write Once, Run Anywhere”。真正跨平台的,是Java字节码,简单理解就是编译后的class文件。
  • 例如,在Windows上,我javac了一个最简单的HelloWorld的Java程序,生成了HelloWorld.class,然后我可以java HelloWorld来执行它。此时,我把HelloWorld.class拷贝到Linux环境中,同样java HelloWorld来执行,可以得到与Windows中相同的结果。事实上,如果我拷贝HelloWorld.java文件到Linux环境中,同样javac,生成的class文件也是相同的。
  • 为了在不同的操作系统中把相同的java程序编译成为相同的Java字节码,jdk中bin目录下的编译工具是不相同的,例如javac工具和java工具;因为要将Java字节码编译成为特定平台上的机器码,所以JVM所依赖的JRE中的库文件也是不同的,例如rt.jar。
  • 所以,Windows中的JDK和Linux中的JDK是完全不同的,相同的是可以在两者之间通用的Java字节码。

 

 

创作时间:10/11/2016 4:30:18 PM

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在下载相同版本JDK和JRE之前,我们首先需要理解JDK和JRE的概念。JDK是Java Development Kit的缩写,它是用于开发Java应用程序的软件开发工具包,包含了编译器、调试器和其他开发工具。而JRE是Java Runtime Environment的缩写,它是用于执行Java程序的运行环境,包含了JVM(Java虚拟机)和Java类库。 当我们需要下载相同版本的JDK和JRE时,可以按照以下步骤进行操作: 1. 打开Oracle官方网站(www.oracle.com)。 2. 在菜单栏找到"Downloads"(下载)选项,并点击进入。 3. 在Downloads页面,选择"Java Platform (JDK)"的下载选项。 4. 在Java SE Development Kit的下载页面,选择需要下载的版本号。确保选择的版本与JRE的版本相同。 5. 根据不同操作系统,选择适合操作系统的安装文件进行下载。常见的操作系统有Windows、Mac和Linux。 6. 下载完成后,双击安装文件,按照提示进行安装。在安装过程,可以选择自定义安装的路径,以便将JDK和JRE安装在指定的目录。 7. 同样的步骤,选择"Java Platform (JRE)"的下载选项,并选取与之前下载的JDK版本相同的JRE版本进行下载。 8. 安装JRE时,可以选择将JRE安装在JDK的安装路径,以便两者共享同一目录。 通过以上步骤,就可以成功下载相同版本的JDK和JRE了。下载完成后,我们就可以开始使用Java开发工具进行程序的开发和执行了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值