看了这张图,庆哥决定放弃Java了?
共 4152字,需浏览 9分钟
·
2021-06-08 12:14
庆哥
读完需要
速读仅需 4 分钟
唉,最近庆哥发现,Java 真的是最熟悉的陌生人啊,一张图让我觉得自己真的不懂 Java!
今天,我就要用这张图去证明,你,也真的不懂 Java!不信你就看看吧!
图在哪里?
就是这张图,有人要说了,什么啊,这不就是个介绍 Java 版本历史的图吗?这有啥,还敢说我不懂 Java?别着急,听庆哥慢慢给你说,保准你怀疑自我!
/ LTS 是啥? /
首先第一个问题,这张图中有标有 LTS 的版本,比如以下这几个:
Java SE 8(LTS)
Java SE 11(LTS)
Java SE 17(LTS)
那这个是啥意思呢?这还不简单,这是 Java 的长期支持版本,没错,LTS 代表长期支持版本,目前 Java 中已经发布的 Java8 和 11 是长期支持版本,那么,你可知道长期支持版本的发布周期呢?
我们来看,目前三个出现的长期支持版本的发布时间:
Java 8 是 2014 年发布
Java 11 是 2018 年发布
Java 17 是即将在今年 2021 发布
那么你说 Java 长期支持版本的发布周期是多少呢?四年还是三年?我告诉你吧,是三年,何以证明,我们可以从官方网站上找到说明:看图
以上描述出现在 oracle 官网中的“oracle Java SE 支持路线图”中,也就是这里:
地址是:https://www.oracle.com/java/technologies/java-se-support-roadmap.html ( https://www.oracle.com/java/technologies/java-se-support-roadmap.html )
ok,那么现在我们了解到 Java 的长期支持版本是每三年发布一次,在今年,也就是 2021 年 9 月即将发布的 Java17 就是一个新的长期支持版本!
/ Java 的版本发布 /
知道了长期支持版本的发布周期,那其他的呢?其实 Java 的版本还有这样的分类:
特性版本,比如 Java 8u20
功能版本,比如 Java 8u40
主要版本,比如 LTS
那么对于主要版本 LTS 我们很清楚是啥,主要就是这个特性版本和功能版本,其实一句话就可以理解:
功能版本就是最终发布的 Java8,Java9,Java10……
另外你也需要知道,对于功能版本,我们可以将其称为非 LTS 版本,这里有张图:
可以看出非 LTS 版本是每半年也就是每隔 6 个月发布一次,但是是在 Java9 之后才开始的,为啥,还看我们原来的图,你看这里:
看到没,从 J2SE 1.2 开始,sun 公司基本是每隔两年发布一次 Java 的新版本,但是为什么 Java6 发布之后却隔了近五年时间呢?
维基百科上有句话值的推敲;
Java 7 发布后,Oracle 承诺回到以前每两年发布一次的发布周期。
咋回事,这里面是有故事的,看我整理的一张图:
直到 Java6,都是 sun 公司在主导的,之所以 Java7 是在 2011 年发布那是因为这其中由于 sun 公司的经营不利被 oracle 给收购了,也就是在 2009 年的时候被 oracle 给收购了,被收购之后,Java7 才得以在 2011 年发布,当然,这个时候其实主导的就是 oracle 不再是 sun 公司了!
/ oracle 接受 Java /
sun 被 oracle 收购之后,在 2011 年发布了 Java7,这一年,Oracle 承诺回到以前每两年发布一次的发布周期。但是,就要到了 2013 年的时候,oracle 却宣布 Java 延期发布,说是有漏洞,在修复,于是最终 Java8 是在 2014 年发布的。
也就是 Java7 到 Java8 是隔了三年,那到了发布 Java9 的时候也是隔了三年,是在 2017 年发布的,这是不是意味着 oracle 不再遵循 sun 之前的每两年发布一次,而是三年发布一次呢?
事情有了转机,在 2017 年 Java9 发布之后,Java 平台的主架构师 Mark Reinhold 发出提议,要求将 Java 的功能更新周期从之前的每两年一个新版本缩减到每六个月一个新版本。该提议获得了通过,并在提出后不久生效。
于是从 Java9 开始就是每 6 个月发布一次新版本了,但是此前 oracle 想要每三年发布一次版本的念头还没有打消,于是乎,你猜的没错,就是 LTS 版本的发布周期……
/ OpenJDK /
在这个过程中,诞生了一个很重要的社区组织,那就是 OpenJDK,这是啥呢?
继续看这张图:
早在 sun 公司被 oracle 收购之前,sun 公司在 2006 年的 JavaOne 大会上就决定对 Java 开放源代码,于是在 2009 年 4 月 15 日正式发布 OpenJDK。甲骨文在收购 sun 公司之后也接管了这个项目。
这就是我们熟知的 OpenJDK 了。那么相信你们也一定有这样的疑问?
1
JDK 和 OpenJDK 有啥区别
我们一般说的 JDK 自从 sun 被 oracle 收购之后,指的就是 oracle JDK 了,那这个与 OpenJDK 有啥区别呢?
Java Development Kit(JDK)是 sun 公司搞出来的,在 2006 年 sun 公司决定将其开源,但是在JDK 中的源码有一部分是商业源码,就是 JDK 中的源码不全是 sun 公司的,那这块代码 sun 公司是无权将其开源的,这些代码被称为闭源的一些特性,但是 sun 还是讲这部分闭源特性给去掉将 JDK 源码开源了。
但是由于开源后的代码少了一些闭源特性,也就是少了一些商业代码所提供的功能怎么办呢?采取的办法则是找寻具有相同功能的开源代码做了替代,于是就成就了 OpenJDK。
后来 oracle 不是收购了 sun 嘛,这个 OpenJDK 自然也就属于 oracle 的了,于是 oracle 在 OpenJDK 的基础之上,又增加了一些额外的功能特性,于是就成就了 oracle JDK,也就是我们今天普遍说的 JDK,实际上 oracle JDK 和 OpenJDK 没啥重大的技术差别,只不过 oracle JDK 针对性的增加了一些功能,但是 OpenJDK 是包含 sun 公司之前创造的 JDK 的全部核心功能的,而且由于 oracle 的这一操作,oracle JDK 就成了商业版本,在生产环境使用,还好是要规避一些风险的,而 OpenJDK 则是免费试用,源码开放!
那说到这里,你知道 oracle JDK(简称 JDK)和 OpenJDK 之间的差别了吗?
OpenJDK 只包含 JDK 中最核心的功能,JDK 中的一些非核心功能 OpenJDK 是不包含的,比如 oracle 自行添加的一些商用功能以及额外特性。
可以说,OpenJDK 是 JDK 的极简版本,另外还有一个重要知识点:
我们一般说的 JDK 指的就是 oracle 的 JDK,每次 JDK 的新版本发布,都是把 OpenJDK 中的更新拿过来加上自己的私有部分,也就形成了最终的新版本 JDK。
比如说即将发布的 Java17,目前 oracle 上是找不到的,最新的 Java17 相关信息是在 OpenJDK 上的,你看:
/ JDK 的不同厂商 /
通过上述描述,我们知道 OpenJDK 就是包含大部分原有 JDK 的核心,而现在说的 JDK 指的是 oracle 在 OpenJDK 之上加上私有特性形成的 oracle JDK,因为现在 OpenJDK 是被 oracle 主导的,那么 oracle JDK 也就享有特权直接叫 JDK。
可是不管怎么说,OpenJDK 是开源的,不仅你 oracle 可以拿过来加上私有特性形成你的 oracle JDK,其他厂商也可以这么做,比如有如下这些:
AdoptOpenJDK:算是半官方,这个是由 OpenJDK 社群维护的
Amazon(亚马逊) Corretto JDK
阿里 Dragonwell JDK
腾讯 Kona JDK
华为毕昇 JDK
等等……其本质就是拿 OpenJDK 加上私有特性构建而成!
/ JDK 下载镜像 /
我们一般下载 JDK 都是去 oracle 的官网上下载,毕竟这是正宫嘛,但是由于 oracle 的一些 S 操作加上一些其他原因下载异常的慢有的时候,为了解决这个问题,国内有很多不错的 JDK 下载镜像网站,这里推荐几个:
嗖嗖下载 java jdk 镜像:http://www.sousou88.com/spec/java.html ( http://www.sousou88.com/spec/java.html )
清华 AdoptOpenJDK 镜像:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/ ( https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/ )
华为 java-jdk 镜像:https://repo.huaweicloud.com/java/jdk/ ( https://repo.huaweicloud.com/java/jdk/ )
各种 JAVA JDK 的镜像分发:https://www.injdk.cn/ ( https://www.injdk.cn/ )
ok,今天的分享就到这里了,那么,看完本篇文章,你涨知识了吗?
顺便再说一句,放弃Java,不存在的,毕竟很有钱途!
放弃鸿蒙升级,也要搞懂Java的这个问题!
请马上卸载Notepad++...!