5 分钟掌握 Java 核心之 一:你真的了解 Java 么?

♀尐吖头ヾ 提交于 2020-02-04 10:04:56

问题

  1. java 是一门多范式的语言,你知道么?它支持哪些编程范式?
  2. JRE 和 JDK 分别指什么?它们的关系是咋样的?
  3. 为什么安装 JDK 的时候会安装两个 JRE?
  4. Java8 到 Java13 都有哪些重大变化?JRE从哪个版本开始退出历史舞台,原因是什么?
  5. OpenJDK 和 Oracle JDK 有啥区别?

目标

对 Java 发展、主要特性、构成有一个基本的了解。

Java 是多范式的语言

  1. 传统 Java 是解释型的语言,现在的 JIT、AOT 技术,让 Java 也支持了编译型语言的特性;
  2. 传统 Java 是面向对象的语言,JDK8 引入 Lambda,让 Java 支持函数式编程范式。
  3. 传统 Java 是命令式编程范式,JDK9 引入 Flow,让 Java 更好的支持响应式编程范式;

基础概念

Java SE:Java Platform Standard Edition

JRE:Java Runtime Environment

JDK:Java Development Kit

JVM:Java Virtual Machine

看这张图,上面的关系应该非常清晰了。

java conceptual diagram
注:从 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 使用了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!