官术网_书友最值得收藏!

1.3 Java發展史

從Java的第一個版本誕生到現在已經有二十余年的時間,白駒過隙,滄海桑田,轉眼已過了四分之一個世紀,在圖1-3所示的時間線里,我們看到JDK的版本已經發展到了JDK 13。這二十多年里誕生過無數與Java相關的產品、技術與標準。現在讓我們走入時間隧道,從孕育Java語言的時代開始,再來回顧一下Java的發展軌跡和歷史變遷。

1991年4月,由James Gosling博士領導的綠色計劃(Green Project)開始啟動,此計劃最初的目標是開發一種能夠在各種消費性電子產品(如機頂盒、冰箱、收音機等)上運行的程序架構。這個計劃的產品就是Java語言的前身:Oak(得名于James Gosling辦公室外的一棵橡樹)。Oak當時在消費品市場上并不算成功,但隨著1995年互聯網潮流的興起,Oak迅速找到了最適合自己發展的市場定位并蛻變成為Java語言。

圖1-3 Java技術發展的時間線

1995年5月23日,Oak語言改名為Java,并且在SunWorld大會上正式發布Java 1.0版本。Java語言第一次提出了“Write Once,Run Anywhere”的口號。

1996年1月23日,JDK 1.0發布,Java語言有了第一個正式版本的運行環境。JDK 1.0提供了一個純解釋執行的Java虛擬機實現(Sun Classic VM)。JDK 1.0版本的代表技術包括:Java虛擬機、Applet、AWT等。

1996年4月,十個最主要的操作系統和計算機供應商聲明將在其產品中嵌入Java技術。同年9月,已有大約8.3萬個網頁應用了Java技術來制作。在1996年5月底,Sun于美國舊金山舉行了首屆JavaOne大會,從此JavaOne成為全世界數百萬Java語言開發者每年一度的技術盛會。

1997年2月19日,Sun公司發布了JDK 1.1,Java里許多最基礎的技術支撐點(如JDBC等)都是在JDK 1.1版本中提出的,JDK 1.1版的技術代表有:JAR文件格式、JDBC、JavaBeans、RMI等。Java語言的語法也有了一定的增強,如內部類(Inner Class)和反射(Reflection)都是在這時候出現的。

直到1999年4月8日,JDK 1.1一共發布了1.1.0至1.1.8這9個版本。從1.1.4以后,每個JDK版本都有一個屬于自己的名字(工程代號),分別為:JDK 1.1.4-Sparkler(寶石)、JDK 1.1.5-Pumpkin(南瓜)、JDK 1.1.6-Abigail(阿比蓋爾,女子名)、JDK 1.1.7-Brutus(布魯圖,古羅馬政治家和將軍)和JDK 1.1.8-Chelsea(切爾西,城市名)。

1998年12月4日,JDK迎來了一個里程碑式的重要版本:工程代號為Playground(競技場)的JDK 1.2,Sun在這個版本中把Java技術體系拆分為三個方向,分別是面向桌面應用開發的J2SE(Java 2 Platform,Standard Edition)、面向企業級開發的J2EE(Java 2 Platform,Enterprise Edition)和面向手機等移動終端開發的J2ME(Java 2 Platform,Micro Edition)。在這個版本中出現的代表性技術非常多,如EJB、Java Plug-in、Java IDL、Swing等,并且這個版本中Java虛擬機第一次內置了JIT(Just In Time)即時編譯器(JDK 1.2中曾并存過三個虛擬機,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平臺出現過;后面兩款虛擬機都是內置了JIT即時編譯器的,而之前版本所帶的Classic VM只能以外掛的形式使用即時編譯器)。在語言和API層面上,Java添加了strictfp關鍵字,Java類庫添加了現在Java編碼之中極為常用的一系列Collections集合類等。在1999年3月和7月,分別有JDK 1.2.1和JDK 1.2.2兩個小升級版本發布。

1999年4月27日,HotSpot虛擬機誕生。HotSpot最初由一家名為“Longview Techno-logies”的小公司開發,由于HotSpot的優異表現,這家公司在1997年被Sun公司收購。Hot-Spot虛擬機剛發布時是作為JDK 1.2的附加程序提供的,后來它成為JDK 1.3及之后所有JDK版本的默認Java虛擬機。

2000年5月8日,工程代號為Kestrel(美洲紅隼)的JDK 1.3發布。相對于JDK 1.2,JDK 1.3的改進主要體現在Java類庫上(如數學運算和新的Timer API等),JNDI服務從JDK 1.3開始被作為一項平臺級服務提供(以前JNDI僅僅是一項擴展服務),使用CORBA IIOP來實現RMI的通信協議,等等。這個版本還對Java 2D做了很多改進,提供了大量新的Java 2D API,并且新添加了JavaSound類庫。JDK 1.3有1個修正版本JDK 1.3.1,工程代號為Ladybird(瓢蟲),于2001年5月17日發布。

自從JDK 1.3開始,Sun公司維持著穩定的研發節奏:大約每隔兩年發布一個JDK的主版本,以動物命名,期間發布的各個修正版本則以昆蟲作為工程代號。

2002年2月13日,JDK 1.4發布,工程代號為Merlin(灰背隼)。JDK 1.4是標志著Java真正走向成熟的一個版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有參與功能規劃,甚至實現自己獨立發行的JDK 1.4。哪怕是在近二十年后的今天,仍然有一些主流應用能直接運行在JDK 1.4之上,或者繼續發布能運行在1.4上的版本。JDK 1.4同樣帶來了很多新的技術特性,如正則表達式、異常鏈、NIO、日志類、XML解析器和XSLT轉換器,等等。JDK 1.4有兩個后續修正版:2002年9月16日發布的工程代號為Grasshopper(蚱蜢)的JDK 1.4.1與2003年6月26日發布的工程代號為Mantis(螳螂)的JDK 1.4.2。

2002年前后還發生了一件與Java沒有直接關系,但事實上對Java的發展進程影響很大的事件,就是微軟的.NET Framework發布。這個無論是技術實現還是目標用戶上都與Java有很多相近之處的技術平臺給Java帶來了很多討論、比較與競爭,.NET平臺和Java平臺之間聲勢浩大的孰優孰劣的論戰到今天為止都仍然沒有完全平息。

2004年9月30日,JDK 5發布,工程代號為Tiger(老虎)。Sun公司從這個版本開始放棄了謙遜的“JDK 1.x”的命名方式,將產品版本號修改成了“JDK x”Java從1.5版本開始,官方在正式文檔與宣傳上已經不再使用類似“JDK 1.5”的命名,只有程序員內部使用的開發版本號(Developer Version,例如java-version的輸出)中才繼續沿用1.5、1.6、1.7這樣的版本號,而公開版本號(Product Version)則是改為JDK 5.0、JDK 6、JDK 7的命名方式,JDK 5.0中“.0”的后綴從JDK 6起也被移除掉,本書為了行文統一,同樣以JDK 5來指代JDK 5.0。。從JDK 1.2以來,Java在語法層面上的變動一直很小,而JDK 5在Java語法易用性上做出了非常大的改進。如:自動裝箱、泛型、動態注解、枚舉、可變長參數、遍歷循環(foreach循環)等語法特性都是在JDK 5中加入的。在虛擬機和API層面上,這個版本改進了Java的內存模型(Java Memory Model,JMM)、提供了java.util.concurrent并發包等。另外,JDK 5是官方聲明可以支持Windows 9x操作系統的最后一個JDK版本。

2006年12月11日,JDK 6發布,工程代號為Mustang(野馬)。在這個版本中,Sun公司終結了從JDK 1.2開始已經有八年歷史的J2EE、J2SE、J2ME的產品線命名方式,啟用Java EE 6、Java SE 6、Java ME 6的新命名來代替。JDK 6的改進包括:提供初步的動態語言支持(通過內置Mozilla JavaScript Rhino引擎實現)、提供編譯期注解處理器和微型HTTP服務器API,等等。同時,這個版本對Java虛擬機內部做了大量改進,包括鎖與同步、垃圾收集、類加載等方面的實現都有相當多的改動。

在2006年11月13日的JavaOne大會上,Sun公司宣布計劃要把Java開源,在隨后的一年多時間內,它陸續地將JDK的各個部分在GPL v2(GNU General Public License v2)協議下公開了源碼,并建立了OpenJDK組織對這些源碼進行獨立管理。除了極少量的產權代碼(Encumbered Code,這部分代碼所有權不屬于Sun公司,Sun本身也無權進行開源處理)外,OpenJDK幾乎擁有了當時SunJDK 7的全部代碼,OpenJDK的質量主管曾經表示在JDK 7中,SunJDK和OpenJDK除了代碼文件頭的版權注釋之外,代碼幾乎是完全一樣的,所以OpenJDK 7與SunJDK 7本質上就是同一套代碼庫出來的產品。

JDK 6發布以后,由于代碼復雜性的增加、Java開源、開發JavaFX、世界經濟危機及Oracle對Sun的收購案等原因,Sun公司在發展Java以外的事情上耗費了太多精力和資源,JDK的更新沒有能夠繼續維持兩年發布一個主版本的研發速度,這導致了JDK 6的生命周期異常的長,一共發布了211個更新升級補丁,最后的版本為Java SE 6 Update 211,于2018年10月18日發布。

2009年2月19日,工程代號為Dolphin(海豚)的JDK 7完成了其第一個里程碑版本。按照JDK 7最初的功能規劃,一共會設置十個里程碑。最后一個里程碑版本原計劃定于2010年9月9日結束,但由于各種原因,JDK 7最終無法按計劃完成。

從JDK 7最原始的功能清單來看,它本應是一個包含許多重要改進的JDK版本,其中規劃的子項目都為Java業界翹首以盼,包括:

·Lambda項目:支持Lambda表達式,支持函數式編程。

·Jigsaw項目:虛擬機層面的模塊化支持。

·動態語言支持:Java是靜態語言,為其他運行在Java虛擬機上的動態語言提供支持。

·Garbage-First收集器。

·Coin項目:Java語法細節進化。

令人惋惜的是,在JDK 7開發期間,Sun公司相繼在技術競爭和商業競爭中陷入泥潭,公司的股票市值跌至僅有高峰時期的3%,已無力推動JDK 7的研發工作按計劃繼續進行。為了盡快結束JDK 7長期跳票的問題,Oracle收購Sun公司后隨即宣布馬上實行“B計劃”,大幅裁剪了JDK 7預定目標,以保證JDK 7的正式版能夠于2011年7月28日準時發布。“B計劃”的主要措施是把不能按時完成的Lambda項目、Jigsaw項目和Coin項目的部分改進延遲到JDK 8之中。最終,JDK 7包含的改進有:提供新的G1收集器(G1在發布時依然處于Experimental狀態,直至2012年4月的Update 4中才正式商用)、加強對非Java語言的調用支持(JSR-292,這項特性在到JDK 11還有改動)、可并行的類加載架構等。

Oracle公司接手了JDK開發工作以后,迅速展現出了完全不同于Sun時期的、極具商業化的處事風格。面對Java中使用最廣泛而又一直免費的Java SE產品線,Oracle很快定義了一套新的Java SE Support除了Java SE Support外,還有面向獨立軟件提供商的Java SE Advanced & Suite產品線,差別是后者帶有JMC等監控工具,詳細內容可以參見本書第4章。產品計劃,把JDK的更新支持作為一項商業服務。JDK 7發布的前80個更新仍然免費面向所有用戶提供,但后續的其他更新包,用戶特指商業用戶,個人使用仍然是可以免費獲得這些更新包的。只能從“將Java SE升級到Java SE Support”與“將JDK 7升級到最新版本”兩個選項里挑一個。JDK 7計劃維護至2022年,迄今(面向付費用戶)已發布了超過兩百個更新補丁,最新版本為JDK 7 Update 221。

對于JDK 7,還有一點值得提起的是,從JDK 7 Update 4起,Java SE的核心功能正式開始為Mac OS X操作系統提供支持,并在JDK 7 Update 6中達到所有功能與Mac OS X完全兼容的程度;同時,JDK 7 Update 6還對ARM指令集架構提供了支持。至此,官方提供的JDK可以運行于Windows(不含Windows 9x)、Linux、Solaris和Mac OS X操作系統上,支持ARM、x86、x86-64和SPARC指令集架構,JDK 7也是可以支持Windows XP操作系統的最后一個版本這是官方的聲明,而事實上直到JDK 8 Update 21之前在Windows XP上仍可正常運行。

2009年4月20日,Oracle宣布正式以74億美元的價格收購市值曾超過2000億美元的Sun公司,傳奇的Sun Microsystems從此落幕成為歷史,Java商標正式劃歸Oracle所有(Java語言本身并不屬于哪間公司所有,它由JCP組織進行管理,盡管在JCP中Sun及后來的Oracle的話語權很大)。由于此前Oracle已經收購了另外一家大型的中間件企業BEA公司,當完成對Sun公司的收購之后,Oracle分別從BEA和Sun手中取得了世界三大商用虛擬機的其中兩個:JRockit和HotSpot。當時Oracle宣布要在未來一至兩年的時間內,把這兩個優秀的Java虛擬機合二為一“HotRockit”項目的相關介紹:http://hirt.se/presentations/WhatToExpect.ppt。。兩者合并的結果只能說差強人意,JRockit的監控工具Java Mission Control被移植到了HotSpot,作為收費功能提供給購買了Java SE Advanced產品計劃的用戶,其他功能由于兩者架構的差異性明顯,HotSpot能夠直接借鑒融合的功能寥寥無幾除了JMC和JFR,HotSpot用本地內存代替永久代實現方法區,支持本地內存使用情況追蹤(NMT)等功能是從JRockit借鑒過來的。

JDK 8的第一個正式版本原定于2013年9月發布,最終還是跳票到了2014年3月18日,盡管仍然是沒有趕上正點,但比起JDK 7那種以年作為計時單位、直接把公司跳崩的研發狀況已是大有改善。為了保證日后JDK研發能更順利地進行,從JDK 8開始,Oracle啟用JEP(JDK Enhancement Proposals)來定義和管理納入新版JDK發布范圍的功能特性。JDK 8提供了那些曾在JDK 7中規劃過,但最終未能在JDK 7中完成的功能,主要包括:

·JEP 126:對Lambda表達式的支持,這讓Java語言擁有了流暢的函數式表達能力。

·JEP 104:內置Nashorn JavaScript引擎的支持。

·JEP 150:新的時間、日期API。

·JEP 122:徹底移除HotSpot的永久代。

·……

“B計劃”中原本說好的會在JDK 8提供的Jigsaw模塊化功能再次被延期到了JDK 9,不得不說,即使放到整個Java發展史里看,Jigsaw都能算是天字第一號的大坑。Java的模塊化系統本身面臨的技術挑戰就很艱巨,從微軟的DLL技術開始,到Java自己的JAR,再到.NET的Assembly,工程龐大起來都無一例外會陷入“模塊地獄”來自于以前的“DLL Hell”,如果讀者不清楚什么是模塊地獄的話,打開你計算機的windows目錄或者windows\system32目錄就明白了。的困境之中,而Jigsaw面臨的更大困難是廠商之間以標準話語權為目的,以技術為“找茬”手段的激烈競爭。

原本JDK 9是計劃在2016年發布的,但在2016年伊始,Oracle就宣布JDK 9肯定要延期至2017年,后來又連續經過了兩次短時間的跳票,最終到2017年9月21日才得以艱難面世。后兩次跳票的原因是以IBM和RedHat為首其實就是以IBM為首,IBM一直與RedHat有密切合作,2018年IBM以340億美元天價收購了RedHat。的十三家企業在JCP執行委員會上聯手否決了Oracle提出的Jigsaw作為Java模塊化規范進入JDK 9發布范圍的提案投票記錄:https://jcp.org/en/jsr/results?id=5959。。憑良心說,Java確實有模塊化的剛需,不論是JDK自身(例如拆分出Java SE Embedded這樣規模較小的產品)抑或是Java應用都需要用到模塊化。這方面IBM本身就是各大Java發行廠商中做得最好的,它不僅讓自家的JDK實現了高度模塊化,還帶頭成立了OSGi聯盟,制訂了Java框架層面模塊化的事實標準,所以它當然會想把OSGi推到Java規范里去爭個“名份”,而不是被Jigsaw革掉“性命”。可是Oracle對此沒有絲毫退讓,不惜向JCP發去公開信公開信:https://www.infoq.cn/article/2017/05/jigsaw-open-letter。,直言如果提案最后無法通過,那Oracle將摒棄JSR專家組,獨立發展帶Jigsaw的Java版本,Java頓時面臨如Python 2與Python 3那般分裂的危機。

不論如何,經過前后六輪投票,經歷桌上桌下的斗爭與妥協,Java沒有分裂,JDK 9總算是帶著Jigsaw最終發布了,除了Jigsaw外,JDK 9還增強了若干工具(JS Shell、JLink、JHSDB等),整頓了HotSpot各個模塊各自為戰的日志系統,支持HTTP 2客戶端API等91個JEP。

JDK 9發布后,Oracle隨即宣布Java將會以持續交付的形式和更加敏捷的研發節奏向前推進,以后JDK將會在每年的3月和9月各發布一個大版本也改掉了在開發版號中1.7、1.8的命名,從JDK 10后將是年份加月份作為開發版本號,譬如18.3,即表示2018年3月的大版本。,目的就是為避免眾多功能特性被集中捆綁到一個JDK版本上而引發交付風險。這次改革確實從根源上解決了跳票問題,但也為Java的用戶和發行商帶來了頗大的壓力,不僅程序員感慨“Java新版本還沒開始用就已經過時了”,Oracle自己對著一堆JDK版本分支也在撓頭,不知道該如何維護更新,該如何提供技術支持。Oracle的解決方案是順理成章地終結掉“每個JDK版本最少維護三年”的優良傳統,從此以后,每六個JDK大版本中才會被劃出一個長期支持(Long Term Support,LTS)版,只有LTS版的JDK能夠獲得為期三年的支持和更新,普通版的JDK就只有短短六個月的生命周期。JDK 8和JDK 11會是LTS版,再下一個就到2021年發布的JDK 17了。

2018年3月20日,JDK 10如期發布,這版本的主要研發目標是內部重構,諸如統一源倉庫、統一垃圾收集器接口、統一即時編譯器接口(JVMCI在JDK 9已經有了,這里是引入新的Graal即時編譯器)等,這些都將會是對未來Java發展大有裨益的改進,但對普通用戶來說JDK 10的新特性就顯得乏善可陳,畢竟它只包含了12個JEP,而且其中只有本地類型推斷這一個編碼端可見的改進。盡管JDK 10可見的改進有限,但2018這一年Java圈絲毫不缺乏談資,相繼發生了幾件與“金錢”相關的歷史性大事件。

首先是2018年3月27日,Android的Java侵權案有了最終判決,法庭裁定Google賠償Oracle合計88億美元,要知道2009年Oracle收購Sun也就只花了74億,收購完成后隨即就用Sun的專利把Google告上了法庭,經過Oracle法務部的幾輪神操作,一場官司的賠償讓收購Sun公司等同免費。對此事Java技術圈多數吃瓜群眾是站在Google這邊的,認為Oracle這樣做是自絕Java的發展前景,畢竟當年Android剛剛起步的時候可是Sun向Google拋去的橄欖枝,Android的流行也鞏固了Java“第一編程語言”的行業地位。摒棄對企業的好惡情感,就事論事,Google采用Java的語法和API類庫,開發出來的程序卻不能運行在其他Java虛擬機之上,這事情無論怎樣都是有違Java技術的精神原旨的,也肯定違反了Java的使用協議Oracle與Google的官司主要焦點在于Java API的版權問題,而不在程序是否能運行在標準Java虛擬機上。。如果說Oracle控告Google“不厚道”,那當年微軟用J++做了同樣的事情(借用語法和API,但程序不兼容標準Java虛擬機),被Sun告到登報道歉,一邊賠款一邊割地,聲明放棄J++語言和Windows平臺上的內置虛擬機,這又該找誰說理去?

按常理說Java剛給Oracle賺了88億美金,該頗為受寵才對,可Oracle是典型只談利益不講情懷的公司,InfoWorld披露的一封Oracle高管郵件表明資料來源:https://www.infoworld.com/article/2987529/insider-oracle-lost-interest-in-java.html。,Java體系中被認為無法盈利也沒有太多戰略前景的部分會逐漸被“按計劃報廢”(Planned Obsolescence)。這事的第一刀落下是在2018年3月,Oracle正式宣告Java EE成為歷史名詞。雖然Java SE、Java EE和Java ME三條產品線里確實只有Java SE稱得上成功,但Java EE畢竟無比輝煌過,現在其中還持有著JDBC、JMS、Servlet等使用極為廣泛的基礎組件,然而Oracle仍選擇把它“掃地出門”,所有權直接贈送給Eclipse基金會,唯一的條件是以后不準再使用“Java”這個商標最大的爭議點是Oracle要求包名中不能出現java字樣,導致一堆javax.*開頭的包一旦修改或添加新代碼,就必須重新命名,這將讓用到它們的代碼都受到影響。資料來源:https://www.infoq.cn/article/2018/02/from-javaee-to-jakartaee。,所以取而代之的將是Jakarta EE。

2018年10月,JavaOne 2018在舊金山舉行,此前沒有人想過這會是最后一屆JavaOne大會,這個在1996年伴隨著Java一同誕生、成長的開發者年度盛會,竟是Oracle下一個裁撤的對象Java One大會從2019年起停辦,合并入Oracle CodeOne大會中。,此外還有Java Mission Control的開發團隊,也在2018年6月被Oracle解散。

2018年9月25日,JDK 11發布,這是一個LTS版本的JDK,包含17個JEP,其中有ZGC這樣的革命性的垃圾收集器出現,也有把JDK 10中的類型推斷加入Lambda語法這種可見的改進,但都比不過它發布時爆出來的謠言轟動:“Java要開始收費啦!”

隨著JDK 11發布,Oracle同時調整了JDK的授權許可證,里面包含了好幾個動作。首先,Oracle從JDK 11起把以前的商業特性需要使用+XX:+UnlockCommercialFeatures解鎖的特性,包括JMC、JFR、NMT、AppCDS和ZGC等。全部開源給OpenJDK,這樣OpenJDK 11和OracleJDK 11的代碼和功能,在本質上就是完全相同的(官方原文是Essentially Identical)資料來源:https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later。。然后,Oracle宣布以后將會同時發行兩個JDK:一個是以GPLv2+CE協議下由Oracle發行的OpenJDK(本書后面章節稱其為Oracle OpenJDK),另一個是在新的OTN協議下發行的傳統的OracleJDK,這兩個JDK共享絕大部分源碼,在功能上是幾乎一樣的JDK 11中僅有的微小差別是OpenJDK少了幾個Module(如JavaFX),且不提供安裝包,以壓縮包形式發行。但在JDK 12又產生了新的分歧,OpenJDK的Shenandoah垃圾收集器被排除在OracleJDK之外,詳見第4章的相關內容。,核心差異是前者可以免費在開發、測試或生產環境中使用,但是只有半年時間的更新支持;后者個人依然可以免費使用,但若在生產環境中商用就必須付費,可以有三年時間的更新支持。如果說由此能得出“Java要收費”的結論,那是純屬標題黨,最多只能說Oracle在迫使商業用戶要么不斷升級JDK的版本,要么就去購買商業支持這里的商業支持不限定于Oracle公司,如Azul ZingJDK、AdoptOpenJDK等都能提供商業支持。

2019年2月,在JDK 12發布前夕,Oracle果然如之前宣布那樣在六個月之后就放棄了對上一個版本OpenJDK的維護,RedHat同時從Oracle手上接過OpenJDK 8和OpenJDK 11的管理權利和維護職責Red Hat此前已經是OpenJDK 6(自2013年起)和OpenJDK 7(自2015年起)的維護者。。Oracle不愿意在舊版本上繼續耗費資源,而RedHat或者說它背后的IBM又樂意擴大自己在Java社區的影響力,這是一筆雙贏的交易。RedHat代替Oracle成為JDK歷史版本的維護者,應該有利于Java的持續穩定,但從技術發展角度來看,這并不能為Oracle領導Java社區的局面帶來根本性的改變,畢竟要添加新的或實驗性的功能,僅會針對Java的最新版本,而不會在舊版本上動手。

2019年3月20日,JDK 12發布,只包含8個JEP,其中主要有Switch表達式、Java微測試套件(JMH)等新功能,最引人注目的特性無疑是加入了由RedHat領導開發的Shen-andoah垃圾收集器。Shenandoah作為首個由非Oracle開發的垃圾收集器,其目標又與Oracle在JDK 11中發布的ZGC幾乎完全一致,兩者天生就存在競爭。Oracle馬上用實際行動抵制了這個新收集器,在JDK 11發布時才說應盡可能保證OracleJDK和OpenJDK的兼容一致,轉眼就在OracleJDK 12里把Shenandoah的代碼通過條件編譯強行剔除掉,使其成為歷史上唯一進入了OpenJDK發布清單,但在OracleJDK中無法使用的功能。

Oracle收購Sun是Java發展歷史上一道明顯的分界線。在Sun掌舵的前十幾年里,Java獲得巨大成功,同時也漸漸顯露出來語言演進的緩慢與社區決策的老朽;而在Oracle主導Java后,引起競爭的同時也帶來新的活力,Java發展的速度要顯著高于Sun時代。Java的未來是繼續向前、再攀高峰,還是由盛轉衰、鋒芒挫縮,你我拭目以待。

Java面臨的危機挑戰前所未有的艱巨,屬于Java的未來也從未如此充滿想象與可能。

主站蜘蛛池模板: 恩施市| 孝义市| 溧阳市| 沂水县| 沐川县| 砀山县| 安宁市| 宜章县| 星子县| 霸州市| 普格县| 即墨市| 大关县| 当雄县| 宿州市| 益阳市| 神木县| 读书| 石渠县| 潢川县| 田林县| 临清市| 浦江县| 普格县| 根河市| 华安县| 松滋市| 万盛区| 广宁县| 阿尔山市| 黔江区| 大名县| 江都市| 上林县| 高台县| 长顺县| 万州区| 沙洋县| 仁怀市| 治县。| 南澳县|