Java虛擬機1:什麼是Java

前言java

讓咱們來看一下Java的廣告詞,來自http://www.java.com/zh_CN/about/編程

  • 97%的企業桌面運行Java
  • 美國有89%的桌面(或計算機)運行Java
  • 全球有900萬Java開發人員
  • 開發人員的頭號選擇
  • 排名第一的部署平臺
  • 有30億部移動電話運行Java
  • 100%的藍光盤播放器附帶了Java
  • 有50億張Java卡在使用
  • 1.25億臺TV設備運行Java
  • 前5個原始設備製造商均提供了Java ME

很牛逼不是嗎?OK,這麼牛逼的背後,咱們Java開發人員有想過天天和咱們朝夕相處的Java究竟是什麼呢?固然,不少人腦海裏第一反應必定是,Java不就是一門編程語言嗎,我們天天寫代碼的語言啊。固然,這麼說也是對的,只是Java實際包含的面更廣,一塊兒往下來看下。安全

 

什麼是Java架構

通過了多年的發展,Java早已由一門單純的計算機編程語言,演變爲了一套強大的技術體系是的,什麼是Java,我想技術體系四個字應該是最好的歸納了吧。Java設計者們將Java劃分爲3種結構獨立但卻彼此依賴的技術體系分支,它們分別對應着不一樣的規範集合和組件:oracle

一、Java SE(標準版),主要活躍在桌面領域,主要包含了Java API組件。編程語言

二、Java EE(企業版),活躍在企業級領域,除了包含Java API組件外,還擴充有Web組件、事務組件、分佈式組件、EJB組件、消息組件等,綜合這些技術,開發人員徹底能夠構建出一個具有高性能、結構嚴謹的企業級應用,而且Java EE也是用於構建SOA(面向服務架構)的首選平臺。分佈式

三、Java ME(精簡版),活躍在嵌入式領域,稱之爲精簡版的緣由是,它僅保留了Java API中的部分組件,以及適應設備的一些特有組件。性能

上面講到Java技術體系的分支,那既然Java是一種技術體系,咱們來看一下組成這種技術體系的技術:學習

一、Java編程語言優化

二、字節碼

三、Java API,包括Java API類庫和來自商業機構以及開源社區的第三方類庫

四、Java虛擬機

不少時候咱們只關注了第一點,由於第一點纔是和工做切實相關的。Java技術體系所包含的內容實際上Java官方有提供給咱們一張圖,圖片來源http://docs.oracle.com/javase/7/docs/

 

Java的優勢

Java能得到如此普遍的承認,除了它擁有一門結構嚴謹、面向對象的編程語言以外,還有許多不可忽視的優勢:

一、它擺脫了硬件平臺的束縛,實現了「一次編寫、處處運行」

二、它提供了一個相對安全的內存管理和訪問機制,避免了絕大部分的內存泄露和指針越界問題

三、它實現了熱點代碼檢測和運行時編譯及優化,這使得Java應用能隨着運行時間的增長而得到更高的性能

四、它有一套完整的應用程序接口,還有無數來自商業機構和開源社區的第三方類庫來幫助它實現各類各樣的功能

五、它與身俱來對分佈式技術的支持就比較完善

可是,Java最大的優點和財富還不是以上這些,就像高翔龍老師在《Java虛擬機精講》中寫的,Java真正強大的地方是由於擁有全世界最多的技術擁護者和開源社區支持,他們無時無刻都保持着最充沛的體力與思惟,一步一步地驅動着Java技術的走向。

 

JDK和JRE

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

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

二、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:

一、JSR 14,泛型

二、JSR 51,NIO

三、JSR 175,註解

四、JSR 201,枚舉以及自動裝箱等

五、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,相信代碼能夠改變世界(至少我本人是朝着這個方向努力的),那麼學習、研究虛擬機絕對是不可缺乏的一課。

相關文章
相關標籤/搜索