天天看點

Java 發展曆程

JDK 1.0

1991年4月,由 James Gosling 博士上司的綠色計劃(Green Project)開始啟動,此計劃的目的是開發一種能夠在各種消費性電子産品(如機頂盒、冰箱、收音機等)上運作的程式架構。這個計劃的産品就是Java語言的前身:Oak(橡樹)。Oak當時在消費品市場上并不算成功,但随着1995年網際網路潮流的興起,Oak 迅速找到了最适合自己發展的市場定位并蛻變成為 Java 語言。

1995年5月23日,Oak 語言正式更名為 Java,Java 語言第一次提出了 “Write Once,Run Anywhere”的口号,這一天也被稱為 Java 誕生日。

1996年1月23日,JDK 1.0 釋出,代表技術包括 Java 虛拟機(Sun Classic VM)、Applet、AWT 等。

1996年4月,10個最主要的作業系統供應商申明将在其産品中嵌入 Java 技術。

1996年5月,Sun 公司于美國舊金山舉行了首屆 JavaOne 大會。

1996年9月,已有大約 8.3 萬個網頁應用了 Java 技術來制作。

JDK 1.1

1997年2月19日,JDK 1.1 釋出,代表技術包括 Jar 檔案格式、JDBC、JavaBeans、RMI、内部類、反射等。

JDK 1.1 一共釋出了 1.1.0 - 1.1.8 九個版本,從1.1.4 之後,每個 JDK 版本都有自己的一個代号:

版本 代号 時間
JDK 1.1.4 Sparkler(寶石) 1997-09-12
JDK 1.1.5 Pumpkin(南瓜) 1997-12-13
JDK 1.1.6 Abigail(阿比蓋爾--女子名) 1998-04-24
JDK 1.1.7 Brutus(布魯圖--古羅馬政治家和将軍) 1998-09-28
JDK 1.1.8 Chelsea(切爾西--城市名) 1999-04-08

1998年2月,JDK 1.1 被下載下傳超過 2,000,000 次。

JDK 1.2(Playground - 競技場)

1998年12月4号,JDK 1.2 釋出,這個版本把 Java 技術體系分為三個部分,即 J2SE(面向桌面應用開發)、J2EE(面向企業級開發)、J2ME(面向移動終端開發)。代表技術包括 EJB、Java Plugin-in、Java IDL、Swing、内置 JIT 編譯器、Collections集合類等。

JDK 1.2 共有兩個修訂版本:

JDK 1.2.1 - 1999-03-30
JDK 1.2.2 Cricket(蟋蟀) 1999-07-08

JDK 1.3(Kestrel - 紅隼)

2000年5月8号,JDK 1.3 釋出,這個版本開始 HotSpot 成為了 JDK 的預設虛拟機,代表技術有 JNDI、Timer、Java 2D、JavaSound、數學運算等。

JDK 1.3 有一個修正版本:

JDK 1.3.1 Ladybird(瓢蟲) 2001-05-17

2001年6月5日,NOKIA 宣布,到 2003 年将出售 1 億部支援 Java 的手機。

JDK 1.4(Merlin - 灰背隼)

2002年2月13日,JDK 1.4 釋出,這是 Java 真正走向成熟的一個版本,代表技術包括:正規表達式、異常鍊、NIO、日志類、XML 解析器和 XSLT 轉換器等。

JDK 1.4 有兩個修正版本:

JDK 1.4.1 grasshopper(蚱蜢) 2002-09-16
JDK 1.4.2 Mantis(螳螂) 2003-06-26

JDK 1.5(Tiger - 老虎)

2004年9月30日,JDK 1.5 釋出,代表技術有自動裝箱、泛型、動态注解、枚舉、可變長參數、增強 for 循環等。這個版本還改進了 Java 的記憶體模型、提供了 java.util.concurrent 并發包等。

2006年11月13日,Sun 公司宣布最終會将 Java 開源,并在随後的一年多時間内,陸續将 JDK 的各個部分在 GPL V2 協定下公開了源碼,并建立了 OpenJDK 組織對這些源碼進行獨立管理。(正式開源的版本是 JDK 6)

JDK 6(Mustang - 野馬)

2006年12月11号,JDK 6 釋出,從這個版本開始,J2SE、J2EE、J2ME 的稱呼将不在使用,啟用 Java SE、Java EE、Java ME 的命名方式。另外,JDK 的公開版本号也變成了 JDK 6、JDK 7 的命名方式,而程式員内部使用的開發版本号(java -version)繼續沿用了 1.6、1.7 這樣的稱呼。

JDK 6 的代表技術有動态語言支援(通過内置 Mozilla JavaScript Rhino 引擎實作)、編譯 API 和微型 HTTP 伺服器 API 等。同時,這個版本對 Java 虛拟機内部做了大量改進,包括鎖與同步、垃圾收集、類加載等方面的算法都有相當大的改動。

2008年1月16日,Oracle 收購 BEA,擷取了 JRockit 虛拟機的所有權。

JDK 7(Dolphin - 海豚)

2009年2月19日,JDK 7 釋出,主要改進包括:提供新的 G1 收集器、更新類加載架構、Fork/Join 架構等。

2009年4月20日,Oracle 收購 Sun,獲得了 HotSpot 虛拟機的所有權。但是 Java 語言本身并不屬于哪個公司,它是由 JCP(Java Community Process)組織管理的,JCP 以前主要是由 Sun 公司上司,現在主要由 Oracle 上司,僅此而已。

2010年12月,Apache 基金會因為其 Harmony 虛拟機的 TCK 授權問題和 Oracle 愈演愈烈,憤然退出 JCP,這也是 Java 史上最大的一次分裂。

JDK 8(Spider - 蜘蛛)

2014年3月18日,JDK 8 釋出,又是一個裡程碑的版本,代表技術包括 Lambda 表達式、函數式程式設計、Stream API、新的時間類型等。

JDK 9

2017 年 8 月,甲骨文宣布要将 Java EE 轉移到開源陣營。一個月後,Oracle 将 Java EE 轉移到 Eclipse 基金會,Oracle 也繼續支援現有的 Java EE 許可證。不過,Oracle 可不允許開源組織用 Java 的名号,于是 Eclipse 選出了 "Jakarta EE" 和 "Enterprise Profile" 兩個後續按名字,最終前者以64.4%的票數獲勝。也就是說 ,Java EE已經正式更名為 Jakarta EE、Java Community Process 更名為 Eclipse EE.next Working Group。

2017年9月,JDK 9 釋出,加入了跳票了兩個版本 JigSaw 子產品化、新增了REPL(Read-Eval-Print Loop)工具 jshell、增強 Stream API 等。

2017年9月,Oracle 宣布,為了更快地疊代,以及跟進社群回報,Java 的版本釋出周期變更為每半年釋出一個大版本,每個季度釋出一個中間特性版本,并且承諾不會跳票。通過這樣的方式,開發團隊可以把一些關鍵特性盡早合并到 JDK 之中,以快速得到開發者回報。按照官方的說法,新的釋出周期會嚴格遵循時間點,将于每年的3月份和9月份釋出。其實程式員不必為頻繁釋出的 JDK 版本撓頭抓耳,Oracle 隻對 LTS(Long Term Support,LTS)版的 JDK 進行為期三年的的支援和更新,普通版的 JDK 隻有短短六個月的生命周期,JDK 8઼、JDK 11會是 LTS 版,再下一個LTS 版要到 2021 年釋出的JDK 17 了。

JDK 10

2018年3月20日,JDK 10 釋出,這版本的主要研發目标是内部重構,諸如統一源倉庫、統一垃圾收集器接口、統一即時編譯器接口(JVMCI 在JDK 9已經有了,這裡是引入新的 Graal 即時編譯器)等。

2018年3月27日,Android 的 Java 侵權案有了最終判決,法庭裁定 Google 賠償 Oracle 合計88億美元,要知道2009年 Oracle 收購 Sun 也就隻花了74億。

JDK 11

2018年9月25日,JDK 11 釋出,這是自 Java 8 後的首個長期支援的版本,其中包括 ZGC 這樣的革命性垃圾收集器,代表技術有:本地變量類型推斷(var )、Stream 加強、字元串加強、HTTP Client API 等。

2018年9月,随着 JDK 11 的釋出,還有一個頗具影響的新聞,就是 Java 收費問題。Oracle 從 JDK11 起把以前的商業特性全部開源給 OpenJDK,這樣 OpenJDK 11 和 Oracle JDK11 的代碼和功能,在本質上是完全相同的。然後 Oracle 宣布以後将會同時釋出兩個 JDK:一個是以 GPLv2+CE 協定下發行的 OpenJDK;另一個是由新的 OTN 協定下發行的傳統的 Oracle JDK,這兩個 JDK 共享絕大部分源碼,在功能上是幾乎一樣的,核心差異是前者可以免費在開發、測試或生産環境中使用,但是隻有半年時間的更新支援;後者個人仍然可以免費使用,但若在生産環境中商用就必須付費,可以有三年時間的更新支援。

2018年10月,JavaOne 2018 在舊金山舉行,此前沒有人會想到這會是最後一屆JavaOne大會。

JDK 12

2019年2月,RetHat 從 Oracle 手中接過了 OpenJDK8 和 OpenJDK11 的管理權力和維護職責,Oracle 不願意在舊版本上繼續耗費資源,而 RedHat 或者說它背後的 IBM 又樂意擴大自己在 Java 社群的影響力,這是一筆雙赢的交易。

2019年3月19日,JDK 12 釋出,主要特性包括:switch 支援表達式、Java 微測試套件(JMH 等功能)。其中最引人注目的特性無疑是加入了由 RedHat 上司開發的 Shenandoah 垃圾收集器,Shenandoah 作為首個由非 Oracle 開發的垃圾收集器,其目标又與 OracleJDK 11中釋出的 ZGC 幾乎完全一緻,兩者天生就存在競争。Oracle 馬上用實際行動抵制了這個新收集器,JDK 11 釋出時才說應盡可能保證 OracleJDK 和 OpenJDK 的相容一緻,轉眼就在 OracleJDK 12 裡把 Shenandoah 的代碼通過條件編譯強行剔除掉,使其成為曆史上唯一進入了 OpenJDK 釋出清單,但在 OracleJDK 中無法使用的功能。

JDK 13

2019年9月13日,JDK 13 釋出,主要特性包括:重新實作傳統套接字API、switch 表達式預覽版、增強 ZGC 将未使用的堆記憶體傳回給作業系統等。

JDK 14

2020年3月17日,JDK 14 釋出,主要特性包括:switch 表達式最終版、增強 ZGC 收集器支援 Window/ Mac、棄用 ParallelScavenge + SerialOld 的 GC 組合等。

...未完待續

tips:

收集了書籍、網上的一些資料,如有侵權,煩請告知。歡迎大家補充~~