问题
- java 是一门多范式的语言,你知道么?它支持哪些编程范式?
- JRE 和 JDK 分别指什么?它们的关系是咋样的?
- 为什么安装 JDK 的时候会安装两个 JRE?
- Java8 到 Java13 都有哪些重大变化?JRE从哪个版本开始退出历史舞台,原因是什么?
- OpenJDK 和 Oracle JDK 有啥区别?
目标
对 Java 发展、主要特性、构成有一个基本的了解。
Java 是多范式的语言
- 传统 Java 是解释型的语言,现在的 JIT、AOT 技术,让 Java 也支持了编译型语言的特性;
- 传统 Java 是面向对象的语言,JDK8 引入 Lambda,让 Java 支持函数式编程范式。
- 传统 Java 是命令式编程范式,JDK9 引入 Flow,让 Java 更好的支持响应式编程范式;
基础概念
Java SE:Java Platform Standard Edition
JRE:Java Runtime Environment
JDK:Java Development Kit
JVM:Java Virtual Machine
看这张图,上面的关系应该非常清晰了。
注:从 Java 9 开始上面的图没有了。
java 版本发布时间
- JDK 1.0 - January 23, 1996
- JDK 1.1 - February 19, 1996
- J2SE 1.2 - December 8, 1998
- J2SE 1.3 - May 8, 2000
- J2SE 1.4 - February 6, 2002
- J2SE 5.0 - September 30, 2004
- Java SE 6 - December 11, 2006
- Java SE 7 - July 28, 2011
- Java SE 8 (LTS) - March 18, 2014:Lambda
- Java SE 9 - September 21, 2017:Java 模块系统、HTTP2、JShell、Reactive Streams、G1 为默认 GC。
- Java SE 10 - March 20, 2018:并行 G1
- Java SE 11 (LTS) - September , 2018:ZGC
- Java SE 12 - March 19, 2019:Shenandoah GC
- Java SE 13 - September 17, 2019
注:从 Java 9 开始每半年一个版本,每三年一个 LTS
答疑
JDK 和 JRE 的关系是什么?
JDK 包含了 JRE,上图说明了一切。最明显的区别就是编译java 程序使用的 javac 只有jdk 有,jre 没有, jre 只能运行 java 程序但是不能编译 java 代码。
为什么安装 JDK 的时候会安装两个 JRE?
首先必须理解 JRE 和 JDK 的关系。在此基础上,运行普通的 Java 程序,必须依赖 JRE,而 JDK 是可选的。
jdk/bin 下包括 java 开发工具。而 jdk/jre/bin 下只包含 java 运行的工具。前面是后面的超集。
JRE从哪个版本开始退出历史舞台,原因是什么?
java11开始,Oracle和openJDK就不再有JRE这个单独的文件夹了。你直接下载使用JDK就好了。
JRE 最初存在的部分原因是为了支持 applet 和 swing,但是这些目前已经基本处于无用的状态,而且给 java 新的发展带来了很大的包袱。从 Java9 开始出现了jigsaw,用 Jlink 可以从 jmods 定制更小的自定义 runtime,plugin之类的也逐渐退役了,并不是不需要 jre 了,而是安装的时候自带 jre 的需求在降低。
Java8 到 Java13 都有哪些重大变化?
后续我会专门一篇文章说明。
OpenJDK 和 Oracle JDK 有啥区别?
维度 | Oracle JDK | OpenJDK |
---|---|---|
协议 | Java11之前为 BCL,Java11 开始GPLv2 + CPE | GPLv2 |
开发 | Sun Microsystems Inc. | Oracle, OpenJDK & Java社区 |
性能 | 一样 | 没有区别 |
发布周期 | Java10开始每6个月,有LTS为三年支持 | 每版本6个月 |
速度 | 一样 | 一样 |
操作系统 | Supports Windows, Linux, Solaris, MacOS | FreeBSD, Linux, Microsoft Windows, Mac OS X |
注:从 Java11 开始商业特性Flight Recorder, Java Mission Control, 和 Application Class-Data Sharing、ZGC可以在 OpenJDK 使用了。
来源:CSDN
作者:wenxueliu
链接:https://blog.csdn.net/wenxueliu/article/details/103837811