讓我們來(lái)看一下Java的廣告詞,來(lái)自http://www.java.com/zh_CN/about/:
- 97%的企業(yè)桌面運(yùn)行Java
- 美國(guó)有89%的桌面(或計(jì)算機(jī))運(yùn)行Java
- 全球有900萬(wàn)Java開(kāi)發(fā)人員
- 開(kāi)發(fā)人員的頭號(hào)選擇
- 排名第一的部署平臺(tái)
- 有30億部移動(dòng)電話運(yùn)行Java
- 100%的藍(lán)光盤(pán)播放器附帶了Java
- 有50億張Java卡在使用
- 1.25億臺(tái)TV設(shè)備運(yùn)行Java
- 前5個(gè)原始設(shè)備制造商均提供了Java ME
很牛逼不是嗎?OK,這么牛逼的背后,我們Java開(kāi)發(fā)人員有想過(guò)每天和我們朝夕相處的Java到底是什么呢?當(dāng)然,很多人腦海里第一反應(yīng)一定是,Java不就是一門(mén)編程語(yǔ)言嗎,咱們每天寫(xiě)代碼的語(yǔ)言啊。當(dāng)然,這么說(shuō)也是對(duì)的,只是Java實(shí)際包含的面更廣,一起往下來(lái)看下。
什么是Java
經(jīng)過(guò)了多年的發(fā)展,Java早已由一門(mén)單純的計(jì)算機(jī)編程語(yǔ)言,演變?yōu)榱艘惶讖?qiáng)大的技術(shù)體系。是的,什么是Java,我想技術(shù)體系四個(gè)字應(yīng)該是最好的概括了吧。Java設(shè)計(jì)者們將Java劃分為3種結(jié)構(gòu)獨(dú)立但卻彼此依賴(lài)的技術(shù)體系分支,它們分別對(duì)應(yīng)著不同的規(guī)范集合和組件:
- Java SE(標(biāo)準(zhǔn)版),主要活躍在桌面領(lǐng)域,主要包含了Java API組件。
- Java EE(企業(yè)版),活躍在企業(yè)級(jí)領(lǐng)域,除了包含Java API組件外,還擴(kuò)充有Web組件、事務(wù)組件、分布式組件、EJB組件、消息組件等,綜合這些技術(shù),開(kāi)發(fā)人員完全可以構(gòu)建出一個(gè)具備高性能、結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)钠髽I(yè)級(jí)應(yīng)用,并且Java EE也是用于構(gòu)建SOA(面向服務(wù)架構(gòu))的首選平臺(tái)。
- Java ME(精簡(jiǎn)版),活躍在嵌入式領(lǐng)域,稱(chēng)之為精簡(jiǎn)版的原因是,它僅保留了Java API中的部分組件,以及適應(yīng)設(shè)備的一些特有組件。
上面講到Java技術(shù)體系的分支,那既然Java是一種技術(shù)體系,我們來(lái)看一下組成這種技術(shù)體系的技術(shù):
- Java編程語(yǔ)言
- 字節(jié)碼
- Java API,包括Java API類(lèi)庫(kù)和來(lái)自商業(yè)機(jī)構(gòu)以及開(kāi)源社區(qū)的第三方類(lèi)庫(kù)
- Java虛擬機(jī)
很多時(shí)候我們只關(guān)注了第一點(diǎn),因?yàn)榈谝稽c(diǎn)才是和工作切實(shí)相關(guān)的。Java技術(shù)體系所包含的內(nèi)容實(shí)際上Java官方有提供給我們一張圖,圖片來(lái)源http://docs.oracle.com/javase/7/docs/
Java的優(yōu)點(diǎn)
Java能獲得如此廣泛的認(rèn)可,除了它擁有一門(mén)結(jié)構(gòu)嚴(yán)謹(jǐn)、面向?qū)ο蟮木幊陶Z(yǔ)言之外,還有許多不可忽視的優(yōu)點(diǎn):
1、它擺脫了硬件平臺(tái)的束縛,實(shí)現(xiàn)了“一次編寫(xiě)、到處運(yùn)行”
2、它提供了一個(gè)相對(duì)安全的內(nèi)存管理和訪問(wèn)機(jī)制,避免了絕大部分的內(nèi)存泄露和指針越界問(wèn)題
3、它實(shí)現(xiàn)了熱點(diǎn)代碼檢測(cè)和運(yùn)行時(shí)編譯及優(yōu)化,這使得Java應(yīng)用能隨著運(yùn)行時(shí)間的增加而獲得更高的性能
4、它有一套完整的應(yīng)用程序接口,還有無(wú)數(shù)來(lái)自商業(yè)機(jī)構(gòu)和開(kāi)源社區(qū)的第三方類(lèi)庫(kù)來(lái)幫助它實(shí)現(xiàn)各種各樣的功能
5、它與身俱來(lái)對(duì)分布式技術(shù)的支持就比較完善
但是,Java最大的優(yōu)勢(shì)和財(cái)富還不是以上這些,就像高翔龍老師在《Java虛擬機(jī)精講》中寫(xiě)的,Java真正強(qiáng)大的地方是因?yàn)閾碛腥澜缱疃嗟募夹g(shù)擁護(hù)者和開(kāi)源社區(qū)支持,他們無(wú)時(shí)無(wú)刻都保持著最充沛的體力與思維,一步一步地驅(qū)動(dòng)著Java技術(shù)的走向。
JDK和JRE
兩個(gè)常見(jiàn)的重要概念。其實(shí)上面的圖中已經(jīng)劃分出了JDK和JRE的范圍了。我們對(duì)這張圖做一個(gè)歸納,用我們的語(yǔ)言簡(jiǎn)單地總結(jié)一下什么是JDK和JRE:
1、JDK(Java Development Kit),是用于支持Java程序開(kāi)發(fā)的最小環(huán)境,基本上Java程序設(shè)計(jì)語(yǔ)言、Java虛擬機(jī)、Java API類(lèi)庫(kù)這三部分組成了JDK
2、JRE(Java Runtime Enviroment),是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境,Java API類(lèi)庫(kù)中的Java SE API自己和Java虛擬機(jī)這兩部分組成了JRE
OpenJDK
前面有講過(guò),“Java真正強(qiáng)大的地方是因?yàn)閾碛腥澜缱疃嗟募夹g(shù)擁護(hù)者和開(kāi)源社區(qū)支持,他們無(wú)時(shí)無(wú)刻都保持著最充沛的體力與思維,一步一步地驅(qū)動(dòng)著Java技術(shù)的走向”。其實(shí)JDK在一開(kāi)始并不是開(kāi)源的,但是隨著開(kāi)源運(yùn)動(dòng)的蓬勃發(fā)展,2006年Sun公司宣布將對(duì)Java開(kāi)放源代碼,開(kāi)源的Java平臺(tái)開(kāi)發(fā)主要集中在OpenJDK項(xiàng)目上。2009年4月15日,Sun公司正式發(fā)布OpenJDK,JDK 7則是Java開(kāi)源后發(fā)布的第一個(gè)版本,任何組織和個(gè)人都可以為Java的發(fā)展做出貢獻(xiàn)。當(dāng)然OpenJDK和真正的Oracle JDK(因?yàn)镾un公司被Oracle公司在2010年收購(gòu)了嘛,所以就叫做Oracle JDK了)還是有區(qū)別的:
OpenJDK中的代碼基本上都來(lái)自于Oracle JDK,屬于Oracle JDK的一個(gè)分支,但是其中去除了一些非開(kāi)源的組件和代碼,替換成了開(kāi)源的組件和代碼,主要是加密和圖形的部分。因此用OpenJDK代替Oracle JDK可能會(huì)有一些的不兼容。
對(duì)于OpenJDK感興趣的,可以在OpenJDK官網(wǎng)http://download.java.net/openjdk/jdk7/下載OpenJDK的源代碼。像Java虛擬機(jī)HotSpot、Java編譯器Javac、JNI等等,源代碼都在里面。
JCP和JSR
JCP(Java Community Process)是一套制定Java技術(shù)規(guī)范的機(jī)制,通過(guò)制定和審查JSR(Java Specification Requests)推動(dòng)Java技術(shù)規(guī)范的發(fā)展。一個(gè)已經(jīng)提交的JSR要想成為最終狀態(tài),需要經(jīng)過(guò)正式的公開(kāi)審查,并由JCP委員會(huì)投票決定,最終的JSR會(huì)提供一個(gè)參考實(shí)現(xiàn),它是免費(fèi)而且公開(kāi)源代碼的。JSR并非只由Oracle管理,任何個(gè)人都可以注冊(cè)并參與審查JSR,對(duì)于Java語(yǔ)言發(fā)展動(dòng)態(tài)感興趣的人來(lái)說(shuō),跟蹤JSR的動(dòng)態(tài)發(fā)展是一條不錯(cuò)的學(xué)習(xí)途徑。在JCP官網(wǎng)http://www.jcp.org/中可以查看所有的JSR,下面列舉幾個(gè)大家熟悉的JSR:
- JSR 14,泛型
- JSR 51,NIO
- JSR 175,注解
- JSR 201,枚舉以及自動(dòng)裝箱等
- JSR 221,JDBC4.0 API
Java虛擬機(jī)
最后,輪到這個(gè)大哥登場(chǎng),也是之后文章的主角。為什么Java可以實(shí)現(xiàn)所謂的“一次編寫(xiě),到處運(yùn)行”,主要是因?yàn)樘摂M機(jī)的存在。Java虛擬機(jī)負(fù)責(zé)Java程序設(shè)計(jì)語(yǔ)言的安全特性和平臺(tái)無(wú)關(guān)性。Java虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java語(yǔ)言編譯器只需要生成在Java虛擬機(jī)上運(yùn)行的字節(jié)碼,就可以在多種平臺(tái)上不加修改地運(yùn)行。Java虛擬機(jī)使得Java擺脫了具體機(jī)器的束縛,使跨越不同平臺(tái)編寫(xiě)程序成為了可能。
要多提一句,我們現(xiàn)在說(shuō)的Java虛擬機(jī)基本上都是JDK自帶的虛擬機(jī)HotSpot,這款虛擬機(jī)也是目前商用虛擬中市場(chǎng)份額最大的一款虛擬機(jī),可以通過(guò)在命令行程序中輸入“java -version”來(lái)查看。
那其實(shí)市面上還有很多別的優(yōu)秀的虛擬機(jī)。Sun公司除了有大名鼎鼎的HotSpot外,還有KVM、Squawk VM、Maxine VM,BEA公司有JRockit VM、IBM公司有J9 VM等等。
后記
越學(xué)習(xí)Java虛擬機(jī),越覺(jué)得它有意思,工作中越能解決一些復(fù)雜的、奇怪的、別人解決不了的問(wèn)題(為什么你比別人厲害、為什么你比別人拿更高的工資?說(shuō)白了不就是你能解決別人解決不了的問(wèn)題、做到別人做不到的事嗎?)。又或者,當(dāng)一個(gè)Java項(xiàng)目龐大到一定程度之后,就會(huì)根據(jù)自己的業(yè)務(wù)需求,定制自己的虛擬機(jī),比如淘寶網(wǎng)就基于OpenJDK深度定制了Taobao VM,能做到這一點(diǎn)的基礎(chǔ)就是對(duì)Java虛擬機(jī)有深入的理解。作為一個(gè)Java開(kāi)發(fā),如果目標(biāo)只是把寫(xiě)代碼這件事情做好,那么OK,完全不需要去學(xué)習(xí)、研究Java語(yǔ)言之外的任何東西,每到一個(gè)公司,只要簡(jiǎn)單理解公司項(xiàng)目的整體架構(gòu)以及理清業(yè)務(wù)就好了。但是如果目標(biāo)是成為一名Java技術(shù)專(zhuān)家、CTO,相信代碼可以改變世界(至少我本人是朝著這個(gè)方向努力的),那么學(xué)習(xí)、研究虛擬機(jī)絕對(duì)是不可缺少的一課。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7526瀏覽量
88388 -
JAVA
+關(guān)注
關(guān)注
19文章
2973瀏覽量
104924 -
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1949瀏覽量
34875
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論