JDK
JDK 全稱 Java Development Kit,是 Java 開發(fā)環(huán)境雹顺。我們通常所說的 JDK 指的是 Java SE (Standard Edition) Development Kit。除此之外還有 Java EE(Enterprise Edition)和 Java ME(Micro Edition platforms)廊遍。
Java 的發(fā)布周期
下面我們看一些 Java 發(fā)展過程中重要的節(jié)點嬉愧。
1995年 alpha 和 beta Java 公開版本發(fā)布,取名為 WebRunner喉前。
1996.1.23Java 第一個版本發(fā)布没酣,取名叫 Oak。但是第一個穩(wěn)定版本是 JDK 1.0.2卵迂,被稱做 Java 1裕便。
1998.12.8發(fā)布了 J2SE 1.2。這個版本到 J2SE 5.0 更名為 Java 2狭握。其中的 SE 指的是 Standard Edition闪金,為了區(qū)別于 J2EE(Enterprise Edition)和 J2ME(Micro Edition)。
2000.5?發(fā)布了 J2SE 1.3论颅,其中包含了 HotSpot JVM哎垦。而 HotSpot JVM 首次發(fā)布是在 1999.4,名為 J2SE 1.2 JVM恃疯。
2004.9.30發(fā)布了 J2SE 5.0漏设。為什么這個版本命名和前面幾個版本不一樣呢?這個版本原本計劃以 1.5 命名的今妄,沿用以前的命名方式郑口。但是為了更好的反映這個版本的成熟度鸳碧,所以改名為 5.0。
這個版本以后犬性,有了一個新的版本控制系統(tǒng)瞻离,5.0 用來表示產(chǎn)品版本,用來表示穩(wěn)定的 J2SE 版本乒裆,而 1.5.0 用來表示開發(fā)者版本套利,也就是 Java 5.0 = JDK 1.5.0。
2006.12.11鹤耍,J2SE 改名為 Java SE肉迫,版本號去掉了 .0。此后對應版本就是 Java 6 = JDK 1.6稿黄,Java 7 = JDK 1.7喊衫。
2011.7.7. 發(fā)布 Java SE 7,是一個重大版本更新杆怕。更新了眾多特性族购。
2018.3發(fā)布 Java SE 10。在此之前财著,Java 基本上是兩年一個版本联四,除了 Java SE 7 經(jīng)過了五年,Java SE 8 經(jīng)過了三年撑教。在此之后朝墩,就是每六個月發(fā)布一次新版本。但是不是每個版本都是 LTS(Long-Term-Support)伟姐。按照 Oracle 的計劃收苏,每三年會有一個 LTS 版本。最近的 LTS 版本就是 Java SE 11 了愤兵。
OpenJDK VS Oracle JDK
OpenJDK 是 在 2007 年由 Sun Corporation(現(xiàn)在的Oracle Corporation) 發(fā)布的鹿霸。是 Oracle JDK 的開源實現(xiàn)版本,以 GPL 協(xié)議發(fā)布秆乳。在 JDK 7 的時候懦鼠,Sub JDK 就是在 Open JDK 7 的基礎上發(fā)布的,只替換了少量的源碼屹堰。在 Sun 公司被 Oracle 收購以后肛冶,Sun SDK 就被稱為 Oracle JDK。Oracle JDK 是基于 Oracle Binary COde License Agreement 協(xié)議扯键。
兩者的區(qū)別如下:
Oracle JDK 將三年發(fā)布一次穩(wěn)定版本睦袖,OpenJDK 每三個月發(fā)布一次。
Oracle JDK 支持 LTS荣刑,OpenJDK 只支持當前版本至下一個版本發(fā)布馅笙。
Oracle JDK 采用 Oracle Binary Code License 協(xié)議伦乔,OpenJDK 采用 GPL v2 協(xié)議。
Oracle JDK 基于 OpenJDK 構建董习,技術上基本沒有差異烈和。
Android 和 JDK
說起 Android 和 OpenJDK 的歷史淵源,還是略微復雜皿淋。
簡單來說斥杜,Android 最開始使用的 Java 是基于 Apache 協(xié)議發(fā)布的 Harmony,后來由于 Harmony 本身的限制和 Oracle 公司的起訴沥匈,從 Android N 以后, Google 開始使用 OpenJDK忘渔。
然后我們再稍微展開聊聊高帖。
JVM 和 TCK
Sun 公司最初開發(fā)了 Java 語言,同時也開發(fā)了 JVM畦粮,并且定義了 JVM 規(guī)范散址。這個我們比較清楚,只要基于 JVM 規(guī)范開發(fā)自己的語言宣赔,就可以運行在 JVM 上预麸。但是依照規(guī)范開發(fā)了語言之后,需要通過 Sun 的 TCK(Technology Compatibility Kit)測試儒将,之后才能成為官方認可的 JVM 語言吏祸。
Harmony 和 OpenJDK
基于 JVM 規(guī)范,Apache 開發(fā)了一個開源免費的 Java 實現(xiàn) Harmony钩蚊,并且根據(jù) Apache License v2 發(fā)布贡翘。但是 Sun 公司并沒有給 Harmony TCK 許可。
在 2009.4.15 Sun 公司發(fā)布了 OpenJDK砰逻,基于 GNU GPL 發(fā)布鸣驱。同時 Sun 公司規(guī)定只有衍生自 OpenJDK 采用的 GPL 協(xié)議的開源實現(xiàn)才能運行 OpenJDK 的 TCK。之后 Oracle 收購 Sun 公司以后接管了 OpenJDK蝠咆。
由于 Apache 的 Harmony 是 Apache 協(xié)議踊东,與 OpenJDK 的 GPL 協(xié)議不兼容,所以 Harmony 一直沒有得到 TCK 授權刚操。
Android 最開始是采用了 Harmony 作為自己的 Java 類庫闸翅,因為 Harmony 使用的 Apache 協(xié)議更自由。而由于 Harmony 沒有通過 TCK 認證赡茸,也為后來 Oracle 起訴 Google 埋下伏筆缎脾。
Oracle 和 Google 關于 JDK 糾紛
后來 Oracle 起訴 Google 主要集中在兩點,一是 Oracle 認為 Google 代碼中使用了 Java 的 37 個 API占卧,二是 Sun 公司前員工在跳槽后為 Android 項目開發(fā)時遗菠,直接復制了 OpenJDK 中的九行代碼联喘,而 Android 項目并沒有按照 GPL 協(xié)議授權,所以復制 OpenJDK 代碼是沒有通過 GPL 授權的辙纬。
所以到后來為了解決專利的問題豁遭,Android N 以后,Android 開始使用 OpenJDK 替換 Harmony贺拣。
以上 Android 和 JDK 參考資料:
https://juejin.im/entry/5abc516b518825556f557f90
https://gudong.name/2019/04/05/android-why-java-harmony.html
然后我以思維導圖的方式蓖谢,給一個Java版本演進的脈絡,這個屬于高級Java 部分譬涡,只是讓大家知道一下闪幽。