jdk-jre.md 5.0 KB
Newer Older
沉默王二's avatar
优化  
沉默王二 已提交
1
## JDK 与 JRE 之间的区别是什么?
沉默王二's avatar
doc  
沉默王二 已提交
2 3 4 5 6 7 8 9 10 11 12

“二哥,之前的文章里提到 JDK 与 JRE,说实在的,这两个概念把我搞得晕乎乎的,你能再给我普及一下吗?”三妹咪了一口麦香可可奶茶后对我说。

“三妹,不要担心,二哥这篇文章一定会让你把它们搞得一清二楚。确实有不少初学的小伙伴对这两个概念很困惑,我当年也困惑了很久。”说完最后这句话,我脸上忍不住泛起了一阵羞涩的红晕。

### 01、JDK

JDK 是 Java Development Kit 的首字母缩写,是提供给 Java 程序员的开发工具包,换句话说,没有 JDK,Java 程序员就无法使用 Java 语言编写 Java 程序。也就是说,JDK 是用于开发 Java 程序的最小环境。

想要成为一名 Java 程序员,首先就需要在电脑上安装 JDK。当然了,新版的 Intellij IDEA(公认最好用的集成开发环境)已经支持直接下载 JDK 了。

沉默王二's avatar
沉默王二 已提交
13
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-01.png)
沉默王二's avatar
doc  
沉默王二 已提交
14 15 16

并且支持下载不同版本的 JDK,除了 Oracle 的 OpenJDK,还有社区维护版 AdoptOpenJDK,里面包含了目前使用范围最广的 HotSpot 虚拟机。

沉默王二's avatar
沉默王二 已提交
17
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-02.png)
沉默王二's avatar
doc  
沉默王二 已提交
18 19 20

如果下载比较慢的话,可以直接在 AdoptOpenJDK 官网上下载。

沉默王二's avatar
沉默王二 已提交
21
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-03.png)
沉默王二's avatar
doc  
沉默王二 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

如果还是比较慢的话,通过 Oracle 官网下载吧!

>https://www.oracle.com/java/technologies/javase-jdk11-downloads.html


JDK 安装成功后,就可以编写 Java 代码了,小伙伴们可以参照上一篇文章《[Hello World](https://mp.weixin.qq.com/s/GYDFndO0Q1Nqzcc_Te61gw)》。

JDK 包含了 JRE,同时还包含了编译 Java 源码的编译器 javac,以及其他的一些重要工具:

- keytool:用于操作 keystore 密钥;
- javap:class 类文件的最基础的反编译器;
- jstack:用于打印 Java 线程栈踪迹的工具;
- jconsole:用于监视 Java 程序的工具;
- jhat:用于 Java 堆分析的工具
- jar:用于打包 Java 程序的工具;
- javadoc:用于生成 Java 文档的工具;

### 02、JRE

JRE 是 Java Runtime Environment 的首字母缩写,是提供给 Java 程序运行的最小环境,换句话说,没有 JRE,Java 程序就无法运行。

Java 程序运行的正式环境一般会选择 Linux 服务器,因为更安全、更高效、更稳定。我们只需要在 Linux 服务器上安装 JRE 就可以运行 Java 程序,而不必安装 JDK,因为我们不需要在服务器上编译和调试 Java 源代码。

刚好我有一台闲置的阿里云服务器,这里就给小伙伴们演示一下 JRE 的安装过程。

第一步:使用以下命令列出服务器上可以安装的 Java 环境:

>yum list java*

可以看到有这么一些(只列出 Java 11 的部分——最近一个 LTS 版本):

沉默王二's avatar
沉默王二 已提交
54
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-04.png)
沉默王二's avatar
doc  
沉默王二 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67

其中 JRE 为 java-11-openjdk.x86_64,JDK 为 java-11-openjdk-devel.x86_64。

第二步,使用以下命令安装 JRE:

>yum install java-11-openjdk.x86_64

第三步,使用以下命令测试是否安装成功:

>java -version

如果出现以下结果,则表明安装成功:

沉默王二's avatar
沉默王二 已提交
68
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-05.png)
沉默王二's avatar
doc  
沉默王二 已提交
69 70 71

由于 JRE 中不包含 javac,所以 `javac -version` 的结果如下所示:

沉默王二's avatar
沉默王二 已提交
72
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-06.png)
沉默王二's avatar
doc  
沉默王二 已提交
73 74 75 76 77

那既然服务器上的 JRE 环境已经 OK 了,那我们就把之前的“Hello World”程序打成 jar 上传过去,让它跑起来。

第一步,Maven clean(对项目清理):

沉默王二's avatar
沉默王二 已提交
78
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-07.png)
沉默王二's avatar
doc  
沉默王二 已提交
79 80 81

第二步,Maven package(对项目打包):

沉默王二's avatar
沉默王二 已提交
82
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-08.png)
沉默王二's avatar
doc  
沉默王二 已提交
83 84 85

可以在 Run 面板中看到以下信息:

沉默王二's avatar
沉默王二 已提交
86
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-09.png)
沉默王二's avatar
doc  
沉默王二 已提交
87 88 89 90 91

说明项目打包成功了。

第三步,使用 FileZilla 工具将 jar 包上传到服务器指定目录。

沉默王二's avatar
沉默王二 已提交
92
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-10.png)
沉默王二's avatar
doc  
沉默王二 已提交
93 94 95

第四步,使用 iTerm2 工具连接服务器。

沉默王二's avatar
沉默王二 已提交
96
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-11.png)
沉默王二's avatar
doc  
沉默王二 已提交
97 98 99 100 101 102 103

第五步,执行以下命令:

>java -cp TechSister-1.0-SNAPSHOT.jar com.itwanger.five.HelloWorld

可以看到以下结果:

沉默王二's avatar
沉默王二 已提交
104
![](https://cdn.jsdelivr.net/gh/itwanger/jmx-java/images/overview/six-12.png)
沉默王二's avatar
doc  
沉默王二 已提交
105 106 107 108 109 110

“搞定了,三妹,今天我们就学到这吧。”转动了一下僵硬的脖子后,我对三妹说,“开发环境需要安装 JDK,因为既需要编写源代码,还需要打包和测试;生产环境只需要安装 JRE,因为只需要运行编译打包好的 jar 包即可。”

“好的,二哥,能把你的服务器账号密码给我一下吗,我想上去测试一把。”三妹似乎对未来充满了希望,这正是我想看到的。

“没问题,随便倒腾。”