java前身
java語言最開始只是Sun計算機(Sun MicroSystems)公司在1990年12月開始研究的一個內(nèi)部項目亲配。Sun計算機公司的一個叫做帕特里克·諾頓的工程師被公司自己開發(fā)的C++和C語言編譯器搞得焦頭爛額坯临,因為其中的API極其難用习劫。帕特里克決定改用NeXT,同時他也獲得了研究公司的一個叫做“Stealth計劃”的項目的機會琳拨。
“Stealth計劃”后來改名為“Green計劃”辜伟,詹姆斯·高斯林和麥克·舍林丹也加入了帕特里克的工作小組奠衔。他們和其他幾個工程師一起在加利福尼亞州門羅帕克市沙丘路的一個小工作室里面研究開發(fā)新技術(shù),瞄準下一代智能家電(如微波爐)的程序設(shè)計戚绕,Sun公司預(yù)料未來科技將在家用電器領(lǐng)域大顯身手仪缸。團隊最初考慮使用C++語言,但是很多成員包括Sun的首席科學(xué)家比爾·喬伊列肢,發(fā)現(xiàn)C++和可用的API在某些方面存在很大問題恰画。
工作小組使用的是嵌入式系統(tǒng),可以用的資源極其有限瓷马。很多成員發(fā)現(xiàn)C++太復(fù)雜以至很多開發(fā)者經(jīng)常錯誤使用拴还。他們發(fā)現(xiàn)C++缺少垃圾回收系統(tǒng),還有可移植的安全性欧聘、分布程序設(shè)計片林、和多線程功能。最后怀骤,他們想要一種易于移植到各種設(shè)備上的平臺费封。
根據(jù)可用的資金,喬伊決定開發(fā)一種集C語言和Mesa語言大成的新語言蒋伦,在一份報告上弓摘,喬伊把它叫做“未來”,他提議Sun公司的工程師應(yīng)該在C++的基礎(chǔ)上痕届,開發(fā)一種面向?qū)ο蟮沫h(huán)境韧献。最初末患,高斯林試圖修改和擴展C++的功能,他自己稱這種新語言為C++ ++ --锤窑,但是后來他放棄了璧针。他將要創(chuàng)造出一種全新的語言,被他命名為“Oak”(橡樹)渊啰,以他的辦公室外的橡樹命名探橱。
1991年4月
由James Gosling博士領(lǐng)導(dǎo)的綠色計劃(Green Project)開始啟動,此計劃的目的是開發(fā)一種能夠在各種消費性電子產(chǎn)品(如機頂盒绘证、冰箱走搁、收音機等)上運行的程序架構(gòu)。這個計劃的產(chǎn)品就是Java語言的前身:Oak(橡樹)迈窟。Oak當時在消費品市場上并不算成功私植,但隨著1995年互聯(lián)網(wǎng)潮流的興起,Oak迅速找到了最適合自己發(fā)展的市場定位并蛻變成為Java語言车酣。
1995年5月23日
Oak語言改名為Java曲稼,并且在SunWorld大會上正式發(fā)布Java 1.0版本。Java語言第一次提出了“Write Once湖员,Run Anywhere”的口號贫悄。
1996年1月23日,JDK 1.0發(fā)布娘摔,Java語言有了第一個正式版本的運行環(huán)境窄坦。JDK 1.0提供了一個純解釋執(zhí)行的Java虛擬機實現(xiàn)(Sun Classic VM)。JDK 1.0版本的代表技術(shù)包括:Java虛擬機凳寺、Applet鸭津、AWT等。
當前javaSE的技術(shù)框架圖:javaSE框架
1996年4月肠缨,10個最主要的操作系統(tǒng)供應(yīng)商申明將在其產(chǎn)品中嵌入Java技術(shù)逆趋。同年9月,已有大約8.3萬個網(wǎng)頁應(yīng)用了Java技術(shù)來制作晒奕。在1996年5月底闻书,Sun公司于美國舊金山舉行了首屆JavaOne大會,從此JavaOne成為全世界數(shù)百萬Java語言開發(fā)者每年一度的技術(shù)盛會脑慧。
1997年2月19日魄眉,Sun公司發(fā)布了JDK 1.1,Java技術(shù)的一些最基礎(chǔ)的支撐點(如JDBC等)都是在JDK 1.1版本中發(fā)布的闷袒,JDK 1.1版的技術(shù)代表有:JAR文件格式坑律、JDBC、JavaBeans霜运、RMI脾歇。Java語法也有了一定的發(fā)展蒋腮,如內(nèi)部類(Inner Class)和反射(Reflection)都是在這個時候出現(xiàn)的淘捡。
直到1999年4月8日藕各,JDK 1.1一共發(fā)布了1.1.0~1.1.8九個版本。從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迎來了一個里程碑式的版本JDK 1.2灿渴,工程代號為Playground(競技場)洛波,Sun在這個版本中把Java技術(shù)體系拆分為3個方向,分別是面向桌面應(yīng)用開發(fā)的J2SE(Java 2 Platform骚露, Standard Edition)蹬挤、面向企業(yè)級開發(fā)的J2EE(Java 2 Platform, Enterprise Edition)和面向手機等移動終端開發(fā)的J2ME(Java 2 Platform棘幸, Micro Edition)焰扳。在這個版本中出現(xiàn)的代表性技術(shù)非常多,如EJB误续、Java Plug-in吨悍、Java IDL、Swing等蹋嵌,并且這個版本中Java虛擬機第一次內(nèi)置了JIT(Just In Time)編譯器(JDK 1.2中曾并存過3個虛擬機畜份,Classic VM、HotSpot VM和Exact VM欣尼,其中Exact VM只在Solaris平臺出現(xiàn)過爆雹;后面兩個虛擬機都是內(nèi)置JIT編譯器的,而之前版本所帶的Classic VM只能以外掛的形式使用JIT編譯器)愕鼓。在語言和API級別上钙态,Java添加了strictfp關(guān)鍵字與現(xiàn)在Java編碼之中極為常用的一系列Collections集合類。
在1999年3月和7月菇晃,分別有JDK 1.2.1和JDK 1.2.2兩個小版本發(fā)布册倒。
1999年4月27日
HotSpot虛擬機發(fā)布,HotSpot最初由一家名為“Longview Technologies”的小公司開發(fā)磺送,因為HotSpot的優(yōu)異表現(xiàn)驻子,這家公司在1997年被Sun公司收購了灿意。HotSpot虛擬機發(fā)布時是作為JDK 1.2的附加程序提供的,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認虛擬機崇呵。
2000年5月8日缤剧,工程代號為Kestrel(美洲紅隼)的JDK 1.3發(fā)布,JDK 1.3相對于JDK 1.2的改進主要表現(xiàn)在一些類庫上(如數(shù)學(xué)運算和新的Timer API等)域慷,JNDI服務(wù)從JDK 1.3開始被作為一項平臺級服務(wù)提供(以前JNDI僅僅是一項擴展)荒辕,使用CORBA IIOP來實現(xiàn)RMI的通信協(xié)議,等等犹褒。這個版本還對Java 2D做了很多改進抵窒,提供了大量新的Java 2D API,并且新添加了JavaSound類庫叠骑。JDK 1.3有1個修正版本JDK 1.3.1李皇,工程代號為Ladybird(瓢蟲),于2001年5月17日發(fā)布宙枷。
自從JDK 1.3開始掉房,Sun維持了一個習(xí)慣:大約每隔兩年發(fā)布一個JDK的主版本,以動物命名朦拖,期間發(fā)布的各個修正版本則以昆蟲作為工程名稱圃阳。
2002年2月13日,JDK 1.4發(fā)布璧帝,工程代號為Merlin(灰背隼)捍岳。JDK 1.4是Java真正走向成熟的一個版本,Compaq睬隶、Fujitsu锣夹、SAS、Symbian苏潜、IBM等著名公司都有參與甚至實現(xiàn)自己獨立的JDK 1.4银萍。哪怕是在十多年后的今天,仍然有許多主流應(yīng)用(Spring恤左、Hibernate贴唇、Struts等)能直接運行在JDK 1.4之上,或者繼續(xù)發(fā)布能運行在JDK 1.4上的版本飞袋。JDK 1.4同樣發(fā)布了很多新的技術(shù)特性戳气,如正則表達式、異常鏈巧鸭、NIO瓶您、日志類、XML解析器和XSLT轉(zhuǎn)換器等。
JDK 1.4有兩個后續(xù)修正版:
2002年9月16日發(fā)布的工程代號為Grasshopper(蚱蜢)的JDK 1.4.1
2003年6月26日發(fā)布的工程代號為Mantis(螳螂)的JDK 1.4.2呀袱。
2002年前后還發(fā)生了一件與Java沒有直接關(guān)系贸毕,但事實上對Java的發(fā)展進程影響很大的事件,那就是微軟公司的.NET Framework發(fā)布了夜赵。這個無論是技術(shù)實現(xiàn)上還是目標用戶上都與Java有很多相近之處的技術(shù)平臺給Java帶來了很多討論明棍、比較和競爭,.NET平臺和Java平臺之間聲勢浩大的孰優(yōu)孰劣的論戰(zhàn)到目前為止都在繼續(xù)油吭。
2004年9月30日
JDK 1.5發(fā)布击蹲,工程代號Tiger(老虎)署拟。從JDK 1.2以來婉宰,Java在語法層面上的變換一直很小,而JDK 1.5在Java語法易用性上做出了非常大的改進推穷。例如心包,自動裝箱、泛型馒铃、動態(tài)注解蟹腾、枚舉、可變長參數(shù)区宇、遍歷循環(huán)(foreach循環(huán))等語法特性都是在JDK 1.5中加入的娃殖。在虛擬機和API層面上,這個版本改進了Java的內(nèi)存模型(Java Memory Model议谷,JMM)炉爆、提供了java.util.concurrent并發(fā)包等。另外卧晓,JDK 1.5是官方聲明可以支持Windows 9x平臺的最后一個JDK版本芬首。
2006年12月11日,JDK 1.6發(fā)布逼裆,工程代號Mustang(野馬)郁稍。在這個版本中,Sun終結(jié)了從JDK 1.2開始已經(jīng)有8年歷史的J2EE胜宇、J2SE耀怜、J2ME的命名方式,啟用Java SE 6桐愉、Java EE 6财破、Java ME 6的命名方式。JDK 1.6的改進包括:提供動態(tài)語言支持(通過內(nèi)置Mozilla Java Rhino引擎實現(xiàn))仅财、提供編譯API和微型HTTP服務(wù)器API等狈究。同時,這個版本對Java虛擬機內(nèi)部做了大量改進,包括鎖與同步抖锥、垃圾收集亿眠、類加載等方面的算法都有相當多的改動。
在2006年11月13日的JavaOne大會上磅废,Sun公司宣布最終會將Java開源纳像,并在隨后的一年多時間內(nèi),陸續(xù)將JDK的各個部分在GPL v2(GNU General Public License v2)協(xié)議下公開了源碼拯勉,并建立了OpenJDK組織對這些源碼進行獨立管理竟趾。除了極少量的產(chǎn)權(quán)代碼(Encumbered Code,這部分代碼大多是Sun本身也無權(quán)限進行開源處理的)外宫峦,OpenJDK幾乎包括了Sun JDK的全部代碼岔帽,OpenJDK的質(zhì)量主管曾經(jīng)表示,在JDK 1.7中导绷,Sun JDK和OpenJDK除了代碼文件頭的版權(quán)注釋之外犀勒,代碼基本上完全一樣,所以O(shè)penJDK 7與Sun JDK 1.7本質(zhì)上就是同一套代碼庫開發(fā)的產(chǎn)品妥曲。
JDK 1.6發(fā)布以后贾费,由于代碼復(fù)雜性的增加、JDK開源檐盟、開發(fā)JavaFX褂萧、經(jīng)濟危機及Sun收購案等原因,Sun在JDK發(fā)展以外的事情上耗費了很多資源葵萎,JDK的更新沒有再維持兩年發(fā)布一個主版本的發(fā)展速度导犹。JDK 1.6到目前為止一共發(fā)布了37個Update版本,最新的版本為Java SE 6 Update 37陌宿,于2012年10月16日發(fā)布锡足。
2009年2月19日,工程代號為Dolphin(海豚)的JDK 1.7完成了其第一個里程碑版本壳坪。根據(jù)JDK 1.7的功能規(guī)劃舶得,一共設(shè)置了10個里程碑。最后一個里程碑版本原計劃于2010年9月9日結(jié)束爽蝴,但由于各種原因沐批,JDK 1.7最終無法按計劃完成。
從JDK 1.7最開始的功能規(guī)劃來看蝎亚,它本應(yīng)是一個包含許多重要改進的JDK版本九孩,其中的Lambda項目(Lambda表達式、函數(shù)式編程)发框、Jigsaw項目(虛擬機模塊化支持)躺彬、動態(tài)語言支持、GarbageFirst收集器和Coin項目(語言細節(jié)進化)等子項目對于Java業(yè)界都會產(chǎn)生深遠的影響。在JDK 1.7開發(fā)期間宪拥,Sun公司由于相繼在技術(shù)競爭和商業(yè)競爭中都陷入泥潭仿野,公司的股票市值跌至僅有高峰時期的3%,已無力推動JDK 1.7的研發(fā)工作按正常計劃進行她君。為了盡快結(jié)束JDK 1.7長期“跳票”的問題脚作,Oracle公司收購Sun公司后不久便宣布將實行“B計劃”,大幅裁剪了JDK 1.7預(yù)定目標缔刹,以便保證JDK 1.7的正式版能夠于2011年7月28日準時發(fā)布球涛。“B計劃”把不能按時完成的Lambda項目校镐、Jigsaw項目和Coin項目的部分改進延遲到JDK 1.8之中亿扁。最終,JDK 1.7的主要改進包括:提供新的G1收集器(G1在發(fā)布時依然處于Experimental狀態(tài)灭翔,直至2012年4月的Update 4中才正式“轉(zhuǎn)正”)魏烫、加強對非Java語言的調(diào)用支持(JSR-292辣苏,這項特性到目前為止依然沒有完全實現(xiàn)定型)肝箱、升級類加載架構(gòu)等。
到目前為止稀蟋,JDK 1.7已經(jīng)發(fā)布了9個Update版本煌张,最新的Java SE 7 Update 9于2012年10月16日發(fā)布。從Java SE 7 Update 4起退客,Oracle開始支持Mac OS X操作系統(tǒng)骏融,并在Update 6中達到完全支持的程度,同時萌狂,在Update 6中還對ARM指令集架構(gòu)提供了支持档玻。至此驹碍,官方提供的JDK可以運行于Windows(不含Windows 9x)初嘹、Linux、Solaris和Mac OS平臺上蓬抄,支持ARM务傲、x86凉当、x64和Sparc指令集架構(gòu)類型。
2009年4月20日售葡,Oracle公司宣布正式以74億美元的價格收購Sun公司看杭,Java商標從此正式歸Oracle所有(Java語言本身并不屬于哪間公司所有,它由JCP組織進行管理挟伙,盡管JCP主要是由Sun公司或者說Oracle公司所領(lǐng)導(dǎo)的)楼雹。由于此前Oracle公司已經(jīng)收購了另外一家大型的中間件企業(yè)BEA公司,在完成對Sun公司的收購之后,Oracle公司分別從BEA和Sun中取得了目前三大商業(yè)虛擬機的其中兩個:JRockit和HotSpot贮缅,Oracle公司宣布在未來1~2年的時間內(nèi)瓜贾,將把這兩個優(yōu)秀的虛擬機互相取長補短,最終合二為一携悯〖缆可以預(yù)見在不久的將來,Java虛擬機技術(shù)將會產(chǎn)生相當巨大的變化憔鬼。
2011年7月28日龟劲,Oracle公司發(fā)布Java SE 1.7
2014年3月18日,Oracle公司發(fā)表Java SE 1.8
###java的特性和優(yōu)勢
跨平臺/可移植性
? ? ? 這是Java的核心優(yōu)勢轴或。Java在設(shè)計時就很注重移植和跨平臺性昌跌。比如:Java的int永遠都是32位。不像C++可能是16照雁,32蚕愤,可能是根據(jù)編譯器廠商規(guī)定的變化。這樣的話程序的移植就會非常麻煩饺蚊。
·安全性
? ? ??Java適合于網(wǎng)絡(luò)/分布式環(huán)境萍诱,為了達到這個目標,在安全性方面投入了很大的精力污呼,使Java可以很容易構(gòu)建防病毒裕坊,防篡改的系統(tǒng)。
·面向?qū)ο?/b>
? ? ??面向?qū)ο笫且环N程序設(shè)計技術(shù)燕酷,非常適合大型軟件的設(shè)計和開發(fā)籍凝。由于C++為了照顧大量C語言使用者而兼容了C,使得自身僅僅成為了帶類的C語言苗缩,多少影響了其面向?qū)ο蟮膹氐仔远伲ava則是完全的面向?qū)ο笳Z言。
·簡單性
? ? ??Java就是C++語法的簡化版酱讶,我們也可以將Java稱之為“C++-”退盯。跟我念“C加加減”,指的就是將C++的一些內(nèi)容去掉浴麻;比如:頭文件得问,指針運算,結(jié)構(gòu)软免,聯(lián)合宫纬,操作符重載,虛基類等等膏萧。同時漓骚,由于語法基于C語言蝌衔,因此學(xué)習(xí)起來完全不費力。
·高性能
? ? ??Java最初發(fā)展階段蝌蹂,總是被人詬病“性能低”噩斟;客觀上,高級語言運行效率總是低于低級語言的孤个,這個無法避免剃允。Java語言本身發(fā)展中通過虛擬機的優(yōu)化提升了幾十倍運行效率。比如齐鲤,通過JIT(JUST IN TIME)即時編譯技術(shù)提高運行效率斥废。 將一些“熱點”字節(jié)碼編譯成本地機器碼,并將結(jié)果緩存起來给郊,在需要的時候重新調(diào)用牡肉。這樣的話,使Java程序的執(zhí)行效率大大提高淆九,某些代碼甚至接待C++的效率统锤。
? ? ??因此,Java低性能的短腿炭庙,已經(jīng)被完全解決了饲窿。業(yè)界發(fā)展上,我們也看到很多C++應(yīng)用轉(zhuǎn)到Java開發(fā)煤搜,很多C++程序員轉(zhuǎn)型為Java程序員免绿。
·分布式
? ? ??Java是為Internet的分布式環(huán)境設(shè)計的,因為它能夠處理TCP/IP協(xié)議擦盾。事實上,通過URL訪問一個網(wǎng)絡(luò)資源和訪問本地文件是一樣簡單的淌哟。Java還支持遠程方法調(diào)用(RMI,Remote Method Invocation)迹卢,使程序能夠通過網(wǎng)絡(luò)調(diào)用方法。
·多線程
? ? ??多線程的使用可以帶來更好的交互響應(yīng)和實時行為徒仓。 Java多線程的簡單性是Java成為主流服務(wù)器端開發(fā)語言的主要原因之一腐碱。
·健壯性
? ? ??Java是一種健壯的語言,吸收了C/C++ 語言的優(yōu)點掉弛,但去掉了其影響程序健壯性的部分(如:指針症见、內(nèi)存的申請與釋放等)。Java程序不可能造成計算機崩潰殃饿。即使Java程序也可能有錯誤谋作。如果出現(xiàn)某種出乎意料之事,程序也不會崩潰乎芳,而是把該異常拋出遵蚜,再通過異常處理機制加以處理帖池。