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

1.1 Java發(fā)展的艱辛歷程

自1995年至今,Java語(yǔ)言已經(jīng)在編程領(lǐng)域內(nèi)經(jīng)歷了數(shù)十年的發(fā)展和升華。Java作為一門長(zhǎng)期霸占編程領(lǐng)域排行榜前三名的語(yǔ)言,被創(chuàng)造出來(lái)之時(shí)似乎并沒(méi)有想到會(huì)有今日的輝煌,它可能只是比別人早走了一步。但我們重溫歷史,再仔細(xì)地分析一下,Java編程語(yǔ)言為什么能夠從無(wú)數(shù)的編程語(yǔ)言當(dāng)中脫穎而出,并不是有意而為之的,甚至高斯林創(chuàng)造它也根本不是為了解決我們今天所遇到的問(wèn)題!可以說(shuō)是“有意栽花花不發(fā),無(wú)心插柳柳成蔭”,但它發(fā)揮的價(jià)值卻遠(yuǎn)比當(dāng)初的預(yù)期更加深遠(yuǎn)。接下來(lái),就讓我們穿越回去翻開(kāi)歷史的篇章,看一下Java發(fā)展過(guò)程中的各個(gè)版本及里程碑節(jié)點(diǎn)的運(yùn)行軌跡。

1990年到1991年初,“Java語(yǔ)言之父”詹姆斯·高斯林帶領(lǐng)他的開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行了一項(xiàng)名為“綠色工程(Green Project)”的項(xiàng)目。該項(xiàng)目最初主要面向智能家電領(lǐng)域,如智能電話、智能電視和智能微波爐等,其使用的程序便是Java的前身:Oak,但是當(dāng)時(shí)其發(fā)展并不太盡如人意。

1995年Oak更名為Java,“Java”這個(gè)名稱來(lái)源于印尼的爪哇島,又因?yàn)樽ν蹗u憑借雀巢咖啡出名,所以Java的logo也就是咖啡杯的形狀。同年,Sun公司正式推出了Java語(yǔ)言的第一個(gè)版本(Java 1.0),但是它當(dāng)時(shí)還并不成熟,如果要實(shí)現(xiàn)更加強(qiáng)大的功能和服務(wù),還需要擴(kuò)展更多的體系和底層庫(kù)。

1996年初,繼首個(gè)Java官方版本推出之后,官方又正式推出了有史以來(lái)首個(gè)Java虛擬機(jī)(Java Virtual Machine ,JVM),并且命名為Sun Classic vm。此外,Java結(jié)構(gòu)體系中劃分了兩個(gè)部分:JRE(Java程序運(yùn)行環(huán)境)和JDK(Java編程開(kāi)發(fā)應(yīng)用工具箱),其中JRE又包含了基礎(chǔ)類庫(kù)的應(yīng)用技術(shù)API、基礎(chǔ)核心技術(shù)應(yīng)用程序API、擴(kuò)展技術(shù)應(yīng)用API,以及用戶圖形化界面的API和JVM 5個(gè)部分,但此時(shí)它還并不完整。

1997年JDK 1.1發(fā)布,其擴(kuò)展增加的技術(shù)點(diǎn)主要有系統(tǒng)支持Jar包的加載及解析功能,同時(shí)還有打包功能;Java數(shù)據(jù)庫(kù)連接JDBC(Java Databate Connetivity)機(jī)制;JavaBeans功能體系、RMI(遠(yuǎn)程方法調(diào)用)等。JDK 1.1與初代JDK相比,最大進(jìn)步就是擁有了非常強(qiáng)大的編譯器:JIT編譯器(即時(shí)編譯器)。JIT編譯器非常智能化,其會(huì)動(dòng)態(tài)地計(jì)算和采集方法的調(diào)用信息,把經(jīng)常調(diào)用的熱點(diǎn)方法指令提前編譯完成后,保存在JVM內(nèi)存內(nèi),這樣就會(huì)形成優(yōu)化體系,等待再次執(zhí)行此段程序時(shí),就不再進(jìn)行編譯處理,大大提高了性能。

1998年12月初,官方發(fā)布了第二個(gè)意義重大的JDK版本,也就是著名的JDK 1.2,其工程代號(hào)為“運(yùn)動(dòng)場(chǎng)”,JDK 1.2包含3個(gè)JDK方向,即 Java SE(標(biāo)準(zhǔn)版)、Java EE(企業(yè)級(jí))和Java 2 ME (移動(dòng)端)。

1999年HotSpot虛擬機(jī)誕生,其由Sun公司旗下的Longview Technologies公司開(kāi)發(fā)。

2000年JDK 1.3正式發(fā)布,其工程代號(hào)為“紅隼”。JDK 1.3引入了新版的虛擬機(jī),即1999年發(fā)布的HotSpot虛擬機(jī),以及RMI、JDDI和JPDA等擴(kuò)展庫(kù)。

2002年2月,JDK 1.4發(fā)布,同時(shí)它也是JCP組織建立的第一個(gè)官方性質(zhì)的版本,其項(xiàng)目代號(hào)為“灰背隼”(Merlin)。JDK 1.4有各大巨頭加盟(如Compaq、Fukitsu、SAS、Symbian、IBM等),其有正則表達(dá)式、斷言機(jī)制、異常Chain機(jī)制、NIO、日志應(yīng)用接口、XML等功能,屬于較為成熟的版本。此外,JDK 1.4版本還有兩個(gè)修訂版本,分別是在2002年9月發(fā)布的“草蜢”版本(JDK 1.4.1)和2003年6月發(fā)布的“螳螂”版本(JDK 1.4.2)。

2004年9月30日,JDK 1.5發(fā)布,人們經(jīng)常稱之為Java 5或者Java SE 5,其工程代號(hào)為“老虎”。從這個(gè)版本開(kāi)始,官方逐漸將JDK版本號(hào)改為5.0、6.0或7.0這種命名規(guī)范。JDK 1.5新增功能包含拆裝箱、動(dòng)態(tài)可變參數(shù)(variable parameter)、動(dòng)態(tài)注解(dynamic annotation)、遍歷循環(huán)(for-each)、枚舉(enum)、泛型(generic type)等,此外它還升級(jí)和優(yōu)化了JMM(JVM Memory Model-JVM內(nèi)存模型)體系。

2006年JDK 6正式發(fā)布,其工程代號(hào)為“野馬”,提供初步動(dòng)態(tài)語(yǔ)言的支持、微型動(dòng)態(tài)語(yǔ)言的支持、腳本語(yǔ)言的支持、WebService的支持、JDBC 4.0的支持等功能,此外還提供了Java編譯器的API。JDK 6在虛擬機(jī)層面上,提供了鎖同步機(jī)制的優(yōu)化、編譯器性能的優(yōu)化及垃圾回收算法的優(yōu)化等。同年,Sun公司將Java源碼進(jìn)行開(kāi)源,開(kāi)源的版本稱為Open JDK。

繼IBM公司并購(gòu)失利之后,在2009年4月,Oracle(甲骨文)公司終于成功以總市值74億美元對(duì)Sun公司進(jìn)行了并購(gòu),至此Java的商標(biāo)正式屬于Oracle公司。但是,Java語(yǔ)言并非由Sun公司或Oracle公司直接進(jìn)行管理,而是由它們旗下的JCP組織進(jìn)行管理。

JDK 7是一個(gè)很重要的版本,其工程代號(hào)為“海豚”,正式版是在2011年7月發(fā)布的。原本規(guī)劃中有很多業(yè)界翹首期盼的項(xiàng)目,如Coin工程計(jì)劃(Java語(yǔ)法細(xì)節(jié)優(yōu)化)、動(dòng)態(tài)語(yǔ)言特性、 G1回收器、Lambda功能的支持(行為參數(shù)化、閉包特性和Lambda表達(dá)式等)、函數(shù)化接口(Function In-terface)、Jigsaq項(xiàng)目、對(duì)Java虛擬機(jī)JVM層面的模塊化支持等。但在Oracle收購(gòu)Sun公司后,為了不延遲JDK 7正式版的發(fā)行,砍掉了Lambda、Jigsaw和Coin項(xiàng)目。

最終,原計(jì)劃在JDK 7中包含的主要更新:全新的G1回收器、對(duì)非Java編程生態(tài)的擴(kuò)展、可并行的類加載結(jié)構(gòu)等,推遲到JDK 8版本的開(kāi)發(fā)計(jì)劃中。

2014年3月JDK 8推出,其補(bǔ)充了許多原本計(jì)劃在JDK 7中新升級(jí)的功能:對(duì)Lambda表達(dá)式支持;因DateFormat及Date功能的缺點(diǎn)和漏洞,出現(xiàn)了新的管理日期及時(shí)間的API;改變了方法區(qū)的實(shí)現(xiàn)機(jī)制,去除了之前的永久代(Permanent Generation),取而代之的是元空間(Metaspace);使用Nashorn引擎取代Rhino引擎,成為Java中嵌入式的JavaScript引擎。

2017年JDK 9發(fā)布,其專門優(yōu)化了Jigsaw項(xiàng)目,還對(duì)很多工具組件進(jìn)行了升級(jí),包括:JHSDB、JLink、JShell等,并重新規(guī)劃了JVM的日志體系等。此外,官方規(guī)定了以6個(gè)版本為間隔單位,作為長(zhǎng)期支持LTS(Long-Term Support)版本的約定,也就是說(shuō)繼JDK 11之后JDK 17也會(huì)屬于LTS版本。

2018年3月JDK 10發(fā)布,內(nèi)部重構(gòu)和統(tǒng)一源倉(cāng)庫(kù)、統(tǒng)一垃圾回收器接口、統(tǒng)一即時(shí)編譯器接口。

2018年10月JDK 11發(fā)布,其加入了革命性的ZGC回收器。Oracle將JDK 11分為Open JDK 11和Oracle JDK 11兩個(gè)版本,其功能基本一樣,差別在于前者對(duì)使用開(kāi)發(fā)沒(méi)有限制,只有半年更新支持,而后者需要商業(yè)收費(fèi)。

2019年3月JDK 12版本發(fā)布,其支持很多新的特性,包括switch關(guān)鍵字可以支持Lambda表達(dá)式、加強(qiáng)版ZGC回收器(Shenandoah GC)、Java微測(cè)試套件等。

2019年9月JDK 13版本發(fā)布,基于之前JDK 10到12的版本中實(shí)現(xiàn)的JVM進(jìn)程之間進(jìn)行共享核心類(啟動(dòng)類加載器所加載的類,以及一些應(yīng)用級(jí)別的類加載器加載的類)的歸檔化機(jī)制,此版本中實(shí)現(xiàn)了動(dòng)態(tài)化歸檔機(jī)制,實(shí)現(xiàn)Java程序執(zhí)行結(jié)束后進(jìn)行動(dòng)態(tài)歸檔功能。同時(shí)還增強(qiáng)了ZGC的動(dòng)態(tài)化釋放堆空間內(nèi)存機(jī)制,比如,當(dāng)一些內(nèi)存空間較長(zhǎng)時(shí)間沒(méi)有被程序所使用時(shí),ZGC可以自動(dòng)化將這些內(nèi)存資源交還給底層操作系統(tǒng),從而不會(huì)造成資源浪費(fèi)。還重寫了SocketAPI的實(shí)現(xiàn),新增的Ni-oSocketImpl類可以代替原有的SocketAPI實(shí)現(xiàn)類,但是原有的SocketAPI實(shí)現(xiàn)類仍然有效。

2020年3月,官方正式發(fā)布JDK的第14個(gè)版本,它包含G1回收器的底層改造(NUMA架構(gòu)模型中的嗅探感知內(nèi)存區(qū)域的分配,還可以適配其他操作系統(tǒng),如MacOS和Windows等);剔除了標(biāo)記-清除回收器(CMS);基于Event Flow的JFR處理方式的調(diào)整和包裝工具箱等,更多特性可以參考官網(wǎng)信息。

至此,Java語(yǔ)言的發(fā)展歷程已經(jīng)基本介紹完,希望讀者在未來(lái)的學(xué)習(xí)中不要只停留在技術(shù)層面上,對(duì)它未來(lái)的發(fā)展方向也應(yīng)該多多關(guān)注,這樣才會(huì)在Java的世界里走得更遠(yuǎn),飛得更高。

主站蜘蛛池模板: 兰坪| 遂昌县| 昌都县| 鄂托克旗| 黑河市| 图们市| 嵊州市| 宿州市| 宝清县| 任丘市| 肃南| 剑河县| 绥芬河市| 遂昌县| 惠州市| 大宁县| 晴隆县| 凌源市| 布拖县| 连云港市| 泰州市| 竹山县| 邯郸市| 汉川市| 稷山县| 新兴县| 青铜峡市| 孟村| 民乐县| 贡嘎县| 循化| 尤溪县| 莲花县| 高淳县| 青岛市| 萍乡市| 油尖旺区| 乌拉特中旗| 乐至县| 洛南县| 汶川县|