1. 程式人生 > >Java 虛擬機導論:什麽是 Java虛擬機

Java 虛擬機導論:什麽是 Java虛擬機

去除 通過 kvm eve 技術 歸納 hotspot 地方 分支

有官方解釋https://www.java.com/zh_CN/about/

重要概念

JDK和JRE

Java技術體系所包含的內容實際上Java官方有提供給我們一張圖,圖片來源http://docs.oracle.com/javase/7/docs/

兩個常見的重要概念。其實上面的圖中已經劃分出了JDK和JRE的範圍了。我們對這張圖做一個歸納,用我們的語言簡單地總結一下什麽是JDK和JRE:

1、JDK(Java Development Kit),是用於支持Java程序開發的最小環境,基本上Java程序設計語言、Java虛擬機、Java API類庫這三部分組成了JDK

2、JRE(Java Runtime Enviroment),是支持Java程序運行的標準環境,Java API類庫中的Java SE API自己和Java虛擬機這兩部分組成了JRE

OpenJDK

前面有講過,“Java真正強大的地方是因為擁有全世界最多的技術擁護者和開源社區支持,他們無時無刻都保持著最充沛的體力與思維,一步一步地驅動著Java技術的走向”。其實JDK在一開始並不是開源的,但是隨著開源運動的蓬勃發展,2006年Sun公司宣布將對Java開放源代碼,開源的Java平臺開發主要集中在OpenJDK項目上。2009年4月15日,Sun公司正式發布OpenJDK,JDK 7則是Java開源後發布的第一個版本,任何組織和個人都可以為Java的發展做出貢獻。當然OpenJDK和真正的Oracle JDK(因為Sun公司被Oracle公司在2010年收購了嘛,所以就叫做Oracle JDK了)還是有區別的:

OpenJDK中的代碼基本上都來自於Oracle JDK,屬於Oracle JDK的一個分支,但是其中去除了一些非開源的組件和代碼,替換成了開源的組件和代碼,主要是加密和圖形的部分。因此用OpenJDK代替Oracle JDK可能會有一些的不兼容。

對於OpenJDK感興趣的,可以在OpenJDK官網http://download.java.net/openjdk/jdk7/下載OpenJDK的源代碼。像Java虛擬機HotSpot、Java編譯器Javac、JNI等等,源代碼都在裏面。

JCP和JSR

JCP(Java Community Process)是一套制定Java技術規範的機制,通過制定和審查JSR(Java Specification Requests)推動Java技術規範的發展。一個已經提交的JSR要想成為最終狀態,需要經過正式的公開審查,並由JCP委員會投票決定,最終的JSR會提供一個參考實現,它是免費而且公開源代碼的。JSR並非只由Oracle管理,任何個人都可以註冊並參與審查JSR,對於Java語言發展動態感興趣的人來說,跟蹤JSR的動態發展是一條不錯的學習途徑。在JCP官網http://www.jcp.org/中可以查看所有的JSR,下面列舉幾個大家熟悉的JSR:

  1. JSR 14,泛型
  2. JSR 51,NIO
  3. JSR 175,註解
  4. JSR 201,枚舉以及自動裝箱等
  5. JSR 221,JDBC4.0 API

Java虛擬機

最後,輪到這個大哥登場,也是之後文章的主角。為什麽Java可以實現所謂的“一次編寫,到處運行”,主要是因為虛擬機的存在。Java虛擬機負責Java程序設計語言的安全特性和平臺無關性。Java虛擬機屏蔽了與具體操作系統平臺相關的信息,使得Java語言編譯器只需要生成在Java虛擬機上運行的字節碼,就可以在多種平臺上不加修改地運行。Java虛擬機使得Java擺脫了具體機器的束縛,使跨越不同平臺編寫程序成為了可能。

要多提一句,我們現在說的Java虛擬機基本上都是JDK自帶的虛擬機HotSpot,這款虛擬機也是目前商用虛擬中市場份額最大的一款虛擬機,可以通過在命令行程序中輸入“java -version”來查看:

技術分享圖片

那其實市面上還有很多別的優秀的虛擬機。Sun公司除了有大名鼎鼎的HotSpot外,還有KVM、Squawk VM、Maxine VM,BEA公司有JRockit VM、IBM公司有J9 VM等等。

後記

越學習Java虛擬機,越覺得它有意思,如果工作中越能解決一些復雜的、奇怪的、別人解決不了的問題(為什麽你比別人厲害、為什麽你比別人拿更高的工資?說白了不就是你能解決別人解決不了的問題、做到別人做不到的事嗎?)。又或者,當一個Java項目龐大到一定程度之後,就會根據自己的業務需求,定制自己的虛擬機,比如淘寶網就基於OpenJDK深度定制了Taobao VM,能做到這一點的基礎就是對Java虛擬機有深入的理解。作為一個Java開發,如果目標只是把寫代碼這件事情做好,那麽OK,完全不需要去學習、研究Java語言之外的任何東西,每到一個公司,只要簡單理解公司項目的整體架構以及理清業務就好了。但是如果目標是成為一名Java技術專家、CTO,相信代碼可以改變世界(至少我本人是朝著這個方向努力的),那麽學習、研究虛擬機絕對是不可缺少的一課。

Java 虛擬機導論:什麽是 Java虛擬機