語言最開始只是Sun計算機(Sun MicroSystems)公司在1990年12月開始研究的一個內部項目。Sun計算機公司的一個叫作帕特里克·諾頓的工程師被公司本身開發的C++和C語言編譯器搞得焦頭爛額,由於其中的API極其難用。帕特里克決定改用NeXT,同時他也得到了研究公司的一個叫作「Stealth計劃」的項目的機會。程序員
「Stealth計劃」後來更名爲「Green計劃」,詹姆斯·高斯林和麥克·舍林丹(Mike Sheridan)也加入了帕特里克的工做小組。他們和其餘幾個工程師一塊兒在加利福尼亞州門羅帕克市沙丘路的一個小工做室裏面研究開發新技術,瞄準下一代智能家電(如微波爐)的程序設計,Sun公司預料將來科技將在家用電器領域大顯身手。團隊最初考慮使用C++語言,可是不少成員包括Sun的首席科學家比爾·喬伊,發現C++和可用的API在某些方面存在很大問題。正則表達式
工做小組使用的是嵌入式系統,能夠用的資源極其有限。不少成員發現C++太複雜以致不少開發者常常錯誤使用。他們發現C++缺乏垃圾回收系統,還有可移植的安全性、分佈程序設計、和多線程功能。最後,他們想要一種易於移植到各類設備上的平臺。編程
根據可用的資金,喬伊決定開發一種集C語言和Mesa語言大成的新語言,在一份報告上,喬伊把它叫作「將來」,他提議Sun公司的工程師應該在C++的基礎上,開發一種面向對象的環境。最初,高斯林試圖修改和擴展C++的功能,他本身稱這種新語言爲C++ ++ --,可是後來他放棄了。他將要創造出一種全新的語言,被他命名爲「Oak」(橡樹),以他的辦公室外的橡樹命名。小程序
就像不少開發新技術的祕密工程同樣,工做小組沒日沒夜地工做到了1993年的夏天,他們可以演示新平臺的一部分了,包括Green操做系統,Oak的程序設計語言,類庫及其硬件。最初的嘗試是面向一種類PDA設備,被命名爲Star7,這種設備有鮮豔的圖形界面和被稱爲「Duke」的智能代理來幫助用戶。1992年12月3日,這臺設備進行了展現。後端
同年11月,Green計劃被轉化成了「FirstPerson有限公司」,一個Sun公司的全資子公司,團隊也被從新安排到了帕洛阿爾託。FirstPerson團隊對建造一種高度交互的設備感興趣,當時代華納發佈了一個關於電視機頂盒的徵求提議書時(Request for proposal),FirstPerson改變了他們的目標,做爲對徵求意見書的響應,提出了一個機頂盒平臺的提議。可是有線電視業界以爲FirstPerson的平臺給予用戶過多的控制權,所以FirstPerson的投標敗給了SGI。與3DO公司的另一筆關於機頂盒的交易也沒有成功,因爲他們的平臺不能在電視工業產生任何效益,公司被並回Sun公司。數組
1992年的夏天,當Oak語言開發成功後,研究者們向硬件生產商進行演示了Green操做系統、Oak的程序設計語言、類庫和其硬件,以說服他們使用Oak語言生產硬件芯片,可是,硬件生產商並未對此產生極大的熱情。由於他們認爲,在全部人對Oak語言還一無所知的狀況下,就生產硬件產品的風險實在太大了,因此Oak語言也就由於缺少硬件的支持而沒法進入市場,從而被擱置了下來。瀏覽器
1994年六、7月間,在經歷了一場歷時三天的討論以後,團隊決定再一次改變了努力的目標,此次他們決定將該技術應用於萬維網。他們認爲隨着Mosaic瀏覽器的到來,因特網正在向一樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。做爲原型,帕特里克·諾頓寫了一個小型萬維網瀏覽器WebRunner。安全
1995年,互聯網的蓬勃發展給了Oak機會。業界爲了使死板、單調的靜態網頁可以「靈活」起來,急需一種軟件技術來開發一種程序,這種程序能夠經過網絡傳播而且可以跨平臺運行。因而,世界各大IT企業爲此紛紛投入了大量的人力、物力和財力。這個時候,Sun公司想起了那個被擱置起來好久的Oak,而且從新審視了那個用軟件編寫的試驗平臺,因爲它是按照嵌入式系統硬件平臺體系結構進行編寫的,因此很是小,特別適用於網絡上的傳輸系統,而Oak也是一種精簡的語言,程序很是小,適合在網絡上傳輸。Sun公司首先推出了能夠嵌入網頁而且能夠隨同網頁在網絡上傳輸的Applet(Applet是一種將小程序嵌入到網頁中進行執行的技術),並將Oak改名爲Java(在申請註冊商標時,發現Oak已經被人使用了,再想了一系列名字以後,最終,使用了提議者在喝一杯Java咖啡時無心提到的Java詞語)。5月23日,Sun公司在Sun world會議上正式發佈Java和HotJava瀏覽器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微軟等各大公司都紛紛中止了本身的相關開發項目,競相購買了Java使用許可證,併爲本身的產品開發了相應的Java平臺。服務器
1996年1月,Sun公司發佈了Java的第一個開發工具包(JDK 1.0),這是Java發展歷程中的重要里程碑,標誌着Java成爲一種獨立的開發工具。9月,約8.3萬個網頁應用了Java技術來製做。10月,Sun公司發佈了Java平臺的第一個即時(JIT)編譯器。網絡
1997年2月,JDK 1.1面世,在隨後的3周時間裏,達到了22萬次的下載量。4月2日,Java One會議召開,參會者逾一萬人,創當時全球同類會議規模之紀錄。9月,Java Developer Connection社區成員超過10萬。
1998年12月8日,第二代Java平臺的企業版J2EE發佈。1999年6月,Sun公司發佈了第二代Java平臺(簡稱爲Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平臺的微型版),應用於移動、無線及有限資源的環境;J2SE(Java 2 Standard Edition,Java 2平臺的標準版),應用於桌面環境;J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應用於基於Java的應用服務器。Java 2平臺的發佈,是Java發展過程當中最重要的一個里程碑,標誌着Java的應用開始普及。
1999年4月27日,HotSpot虛擬機發布。HotSpot虛擬機發布時是做爲JDK 1.2的附加程序提供的,後來它成爲了JDK 1.3及以後全部版本的Sun JDK的默認虛擬機 。
2000年5月,JDK1.三、JDK1.4和J2SE1.3相繼發佈,幾周後其得到了Apple公司Mac OSX的工業標準的支持。2001年9月24日,J2EE1.3發佈。2002年2月26日,J2SE1.4發佈。自此Java的計算能力有了大幅提高,與J2SE1.3相比,其多了近62%的類和接口。在這些新特性當中,還提供了普遍的XML支持、安全套接字(Socket)支持(經過SSL與TLS協議)、全新的I/OAPI、正則表達式、日誌與斷言。2004年9月30日,J2SE1.5發佈,成爲Java語言發展史上的又一里程碑。爲了表示該版本的重要性,J2SE 1.5改名爲Java SE 5.0(內部版本號1.5.0),代號爲「Tiger」,Tiger包含了從1996年發佈1.0版本以來的最重大的更新,其中包括泛型支持、基本類型的自動裝箱、改進的循環、枚舉類型、格式化I/O及可變參數。
2005年6月,在Java One大會上,Sun公司發佈了Java SE 6。此時,Java的各類版本已經改名,已取消其中的數字2,如J2EE改名爲JavaEE,J2SE改名爲JavaSE,J2ME改名爲JavaME
2006年11月13日,Java技術的發明者Sun公司宣佈,將Java技術做爲免費軟件對外發布。Sun公司正式發佈的有關Java平臺標準版的第一批源代碼,以及Java迷你版的可執行源代碼。從2007年3月起,全世界全部的開發人員都可對Java源代碼進行修改 。
2009年,甲骨文公司宣佈收購Sun 。2010年,Java編程語言的共同創始人之一詹姆斯·高斯林從Oracle公司辭職。2011年,甲骨文公司舉行了全球性的活動,以慶祝Java7的推出,隨後Java7正式發佈。2014年,甲骨文公司發佈了Java8正式版
1994年6月,在同約翰·蓋吉、詹姆斯·高斯林、比爾·喬伊、帕特里克·諾頓、韋恩·羅斯因和埃裏克·施密特經歷了一場歷時三天的頭腦風暴後,團隊決定再一次改變努力的目標,此次他們決定將該技術應用於萬維網。他們認爲隨着Mosaic瀏覽器的到來,因特網正在向一樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。做爲原型,帕特里克·諾頓寫了一個小型萬維網瀏覽器,WebRunner,後來更名爲HotJava。
1994年10月,HotJava和Java平臺爲公司高層進行演示。1994年,Java 1.0a版本已經能夠提供下載,可是Java和HotJava瀏覽器的第一次公開發布倒是在1995年3月23日SunWorld大會上進行的。昇陽公司 的科學指導約翰·蓋吉宣告Java技術。這個發佈是與網景公司的執行副總裁馬克·安德森的驚人發佈一塊兒進行的,宣佈網景將在其瀏覽器中包含對Java的支持。1996年1月,Sun公司成立了Java業務集團,專門開發Java技術。
JAVA語言的前身並不是是如今的這個名字,它的前身的名字叫作Oak,意思是橡樹的意思,當初SUN公司的Green項目小組負責人很是喜歡在辦公室的一棵橡樹,因此命名爲Oak。
因爲商標搜索顯示Oak已被一家顯卡製造商註冊。因而同年,Oak被更名爲Java。當使用十六進制編輯器打開由Java源代碼編譯出的二進制文件(.class文件)的話,最前面的32位將顯示爲CA FE BA BE,即詞組「CAFE BABE」(咖啡屋寶貝)
Sun公司開發了一種稱爲Oak的面嚮對象語言。可是在申請註冊商標時,發現Oak已經被人使用了,當時他們正在咖啡館喝着Java咖啡,有一我的靈機一動說就叫Java怎樣,這個提議獲得了其餘人的贊同。最終Oak語言更名爲Java。
在流行幾年以後,Java在瀏覽器中的地位被逐步侵蝕。它在簡單交互性動畫方面的用途已經徹底被Adobe公司的Flash排擠,2005年Java傾向只被用於雅虎遊戲那樣的更爲複雜的應用程序。Java同時遭受到來自微軟的反對,他們決定在新版本的Internet Explorer和Windows中再也不附帶Java平臺。
與此相反,在萬維網的服務器端和手持設備上,Java變得更加流行。不少網站在後端使用JSP和其餘的Java技術。
在桌面系統上,獨立的Java程序仍是相對少見這是由於Java平臺的運行開銷較大,而許多人的計算機上沒有安裝Java,因爲網絡帶寬在 之前較小,下載Java曾經是個耗時的事情。可是隨着計算機計算能力、網絡帶寬在10年中獲取了很大的進步,同時虛擬機和編譯器的質量獲得了提升,許多應 用程序獲得了普遍的使用
2006年SUN在JavaOne公佈Java 開放源代碼項目,並推出OpenJDK項目[13]。Java虛擬機、Java編譯器和Java類庫以GNU通用公共許可證公開。
Java試圖經過新的方式解決軟件編寫的複雜性。不少人認爲Java語言作到了它承諾的一切。可是Java並非一門完美的語言。
有些程序師不喜歡原始類型(primitive type)和類別(class)的分離,尤爲是那些曾經使用過Smalltalk和Ruby的程序員。Java的代碼相對於其餘的代碼來講過於冗長,這與它的輕便化聲明相違背。
Java是一種單繼承的語言。這也致使了程序師在試圖使用多重繼承時候的不便,而不少語言均可以使用這個特性。可是Java可使用接口類,把多重繼承可能致使的風險減小到最小。Java不支持運算符重載,這是爲了防止運算符重載使得代碼的功能變得不清晰。可是用Java實現的語言Groovy能夠進行運算符重載。過去Java對於文本的操做和其餘語言,好比Perl和PHP相比差的較多,但Java在1.4版本時候引入了正則表達式。
至Java 1.7爲止,Java語言不支持閉包(closure)和混入(mixin)特性。
Java 1.8加入lambda表達式(Lambda Expressions)[18]。
使用Swing平臺編寫的帶有GUI(圖形用戶界面)的程序和其餘原始程序很是不一樣。選用AWT工 具包編寫程序的程序師看到的都是原始接口,並且也沒法得到先進的GUI編程支持,若是使用的話,就要提供每一個平臺上面所需的API,這將是一項龐大的工 程。Swing則是徹底用Java語言所寫的程序,避免了接口元素重複的問題,只使用全部平臺都支持的最基本的繪圖機制。可是不少用戶不知道如何在 Java風格和Windows風格之間進行轉換,結果形成了Java程序的接口在不少程序中很是特殊。蘋果計算機已經提供了優化過的Java運行時程序,包含了Mac OS X的經典Aqua接口風格。
因爲Java編譯器和虛擬機的不一樣對Java代碼的性能影響比語言自己的影響大的多,因此統一討論Java的程序的性能常常是有誤導性的。據IBM的數據,在一樣的硬件上2001年時的IBM JDK版本的性能是1996年的JDK版本的十倍左右。而即便是在同一時期,不一樣公司的JDK和JRE的性能也不同,好比SUN、IBM、BEA等公司都有本身開發的JDK和JRE
Java語言的一些特性不可避免的有額外的性能代價,例如數組範圍檢查、運行時類型檢查等等。Java程序的性能還會由於不一樣的動態複雜性 和垃圾處理機制使用的多少而各有不一樣。若是JVM的實現比較優化的話,那麼這些功能甚至能夠增長存儲器分配的性能。這和老是使用STL或者託管C++的程 序的狀況相似。
儘管如此,仍然有許多人認爲Java的性能低。這部分歸因於Sun公司最初的JVM實現使用未優化的解釋機制來運行字節碼。一些新版本的JVM使用Just-In-Time(JIT) 編譯器,在加載字節碼的時候將其編譯成針對運行環境的本地代碼來實現一些本地編譯器的優化特性。Just-In-Time機制和本地編譯的性能比較仍舊是 一個有爭議的話題。JIT編譯須要不少時間,對於運行時間不長或者代碼不少的大型程序並不適宜。可是不算JIT編譯階段的話,程序的運行性能在不少JVM下能夠和本地編譯的程序一爭短長,甚至在一些計算比較密集的數值計算領域也是這樣。當前,Java已經使用更先進的HotSpot技 術來代替JIT技術,Java的性能有了更進一步的提高。另外,在使用-server選項運行Java程序時,也能夠對Java進行更深刻的優化,好比在 運行時將調用較多的方法內聯(inline)到程序中來提升運行速度,這就是所謂的「動態優化」,而本地編譯器是沒法作到這一點的;這也是一些Java代 碼比對應用C/C++等語言編寫的本地代碼運行的更快的緣由之一。微軟的.NET平臺也使用JIT編譯器,因此也有相似問題。
Java的設計目的主要是安全性和可攜性,因此對於一些特性,好比對硬件架構和存儲器地址訪問的直接訪問都被去除了。若是須要間接調用這些底層功能的話,就須要使用JNI(Java 本地接口)來調用本地代碼,而間接訪問意味着頻繁調用這些特性時性能損失會很大,微軟的.NET平臺也有這樣的問題。因此到當前爲止,性能敏感的代碼,例 如驅動程序和3D電子遊戲,仍是大多使用本地編譯,甚至直接以不直接支持面向對象的C語言或機器代碼編寫。但最近已經有了許多用純Java編寫的3D遊 戲,其效果與用C語言編寫的不相上下,例如「合金戰士」(英文名:Chrome)。這主要是由於新版的Java 3D技術已經能像C++同樣調用硬件加速,也就是使用顯卡來加速,不管是C++仍是Java語言寫的3D遊戲都是使用顯卡及GPU來處理,從而使得CPU能夠專一於其餘方面的工做。
1998年12月,JDK1.2的發佈,成爲了JAVA語言的里程碑,JAVA也被首次分爲J2SE,J2ME,J2EE三個開發技術。
2005年,SUN公司將JAVA 2中的2去掉,J2SE改名爲Java SE,JDK1.6改名爲Java SE6。
2009年,Oracle公司收購了SUN公司,這對Java的進一步發展起到了推進做用。
1995年5月23日,Java語言誕生
1996年1月,第一個JDK-JDK1.0誕生
1996年4月,10個最主要的操做系統供應商申明將在其產品中嵌入JAVA技術
1996年9月,約8.3萬個網頁應用了JAVA技術來製做
1997年2月18日,JDK1.1發佈
1997年4月2日,JavaOne會議召開,參與者逾一萬人,創當時全球同類會議規模之紀錄
1997年9月,JavaDeveloperConnection社區成員超過十萬
1998年2月,JDK1.1被下載超過2,000,000次
1998年12月8日,JAVA2企業平臺J2EE發佈
1999年6月,SUN公司發佈Java的三個版本:標準版(J2SE)、企業版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3發佈
2000年5月29日,JDK1.4發佈
2001年6月5日,NOKIA宣佈,到2003年將出售1億部支持Java的手機
2001年9月24日,J2EE1.3發佈
2002年2月26日,J2SE1.4發佈,自此Java的計算能力有了大幅提高
2004年9月30日18:00PM,J2SE1.5發佈,成爲Java語言發展史上的又一里程碑。爲了表示該版本的重要性,J2SE1.5改名爲Java SE 5.0
2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各類版本已經改名,以取消其中的數字「2」:J2EE改名爲Java EE,J2SE改名爲Java SE,J2ME改名爲Java ME
2006年12月,SUN公司發佈JRE6.0
2009年12月,SUN公司發佈Java EE 6
2010年11月,因爲Oracle公司對於Java社羣的不友善,所以Apache揚言將退出
2011年7月28日,Oracle公司發佈Java SE 7
2014年3月18日,Oracle公司發表Java SE 8
2017年9月21日,Oracle公司發表Java SE 9
2018年3月21日,Oracle公司發表Java SE 10
2018年9月25日,Java SE 11發佈
Java 11,12的發佈,Spring社區SpringBoot的發展,都使Java保持着極高的活躍性。
全球有25億Java器件運行着Java,450多萬Java開發者活躍在地球的每一個角落,數以千萬計的Web用戶每次上網都親歷Java的威力。今天,Java運行在7.08億手機、10億智能卡和7億PC機上,併爲28款可兼容的應用服務器提供了功能強大的平臺,愈來愈多的企業由於使用了Java而提升了生產效率。