標籤:從何說起 程式設計 消費電子 電腦 處理器
為了弄清楚Java是什麼,就不得不從Java的誕生開始說起,就如同我們打算認識一個人,都會問這個人出生於哪裡一樣,Sun公司在1991年成立了一個Green的項目,專攻電腦在家電產品上的嵌入式應用,當時由於C++語言過於複雜和龐大,另外消費電子產品所採用的嵌入式處理器晶片的種類繁雜,如何讓編寫的程式跨平台運行也是個難題,請記住跨平台三個字,這決定了Java的基因,天生就是跨平台的,為瞭解決困難,他們首先著眼於語言的開發(牛人就是牛人,開發語言不合適就直接先開發一門語言),1992年的夏天,Oak語言開發成功,這就是Java的前身,這個比我還晚出生的傢伙,經過二十多年的發展,已經成了全球最流行的開發語言,同時也形成了自己專屬的JAVA技術體系。
首先,Java體繫結構包括四個獨立但相關的技術
Java程式設計語言:就是我們最常提到的開發語言
Java class檔案格式:所有Java語言開發的代碼都會被編譯成.class檔案
Java API:Java的一些預先定義的函數
Java VM:Java的核心,因為所有的Java代碼都是在Java虛擬機器上運行
通過以上的認識,我們知道了Java的大體結構,那Java語言是如何被啟動並執行呢?用JAVA語言編譯原始碼,編譯成Java Class檔案,然後在Java VM中運行class檔案,當編寫程式時,通過調用類(Java API)中的方法來訪問系統資源,而當程式運行時,它通過調用class檔案中實現了Java API的方法也滿足程式的Java API調用。Java VM和Java API一起組成了一個“平台”,所有Java程式都在其上編譯和運行,因此,它們有時也被稱作Java運行時環境。
Java VM的主要任務是裝載class檔案並且執行其中的位元組碼。Java VM包含一個類裝載器(class loader),它可以從程式和API裝載class檔案;而Java API的類只在程式執行中需要時才會被裝載。
Java位元組碼由執行引擎來執行。而不同的Java VM中,其執行引擎的實現可能各不相同。最簡單的執行引擎不是一次性解釋位元組碼,而另一種稱為“即時編譯器(just-in-time compiler)”的執行引擎執行速度更快,但要消耗更多的記憶體資源。即時編譯模式下,第一次被執行的位元組碼會被編譯成本地機器代碼並緩衝下來以實現“複用”。
俗話說的好一圖勝過十言,無圖無真相
650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20170210/1486656719504338.jpg" title="1486656719504338.jpg" alt="jvm運行.jpg" style="height:auto;vertical-align:middle;border:0px;" />
就是Java虛擬機器的工作流程,有Jvm中class loader載入程式的類檔案以及Java API的類檔案到執行引擎中,由執行引擎來執行這些被載入進來的程式的類檔案以及Java API的類檔案,
650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20170210/1486656759795478.jpg" title="1486656759795478.jpg" alt="java運行流程.jpg" style="height:auto;vertical-align:middle;border:0px;" />
是JVM虛擬機器工作的具體方法
知道了Java技術的體繫結構,那Java之所以這樣受歡迎,還跟它天生的特性有關係,純物件導向、多線程、結構化錯誤處理,垃圾收集、動態連結、動態擴充,
1998年,Sun把Java技術分拆為三個方向:
J2SE: Standard Edition
J2EE:Enterprise Edition
J2ME:Mobile Edition
2006年,Sun開源了Java技術;遵循GPL規範;並建立了OpenJDK組織管理此些代碼;但是JDK只是提供了J2SE的標準實現,能實現C/S架構開發程式,但是如果要提供網頁格式的內容展示,即B/S網站架構模式,就必須能輸出帶HTML標籤的JAVA代碼,為了便於開發,Sun公司定義了一個規範,即Servlet,也是Java的一個專有類,應用程式可以以HTTP、CGI格式的方式來接收使用者的請求,並且能夠理解HTTP、CGI請求的基礎上,還能構建HTTP、CGI的響應報文,響應給用戶端,同時,Servlet要求程式員在寫Servlet規範的代碼時,必須要以寫入程式碼機制把所有的html都寫入程式碼在Java中,這就要求程式員既要懂Java代碼,還有東前端html樣式設計,這無疑給程式員帶來了很大的困難,於是出現了分體設計JSP,同樣的這也是Java的一個特殊類,這樣html就可以內嵌Java程式了,有一個叫jasper的翻譯官來將jsp翻譯成Servlet代碼,也即是Java代碼
650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20170210/1486656793497583.jpg" title="1486656793497583.jpg" alt="JDK.jpg" style="height:auto;vertical-align:middle;border:0px;" />
即是JDK所提供的功能,最上層是Java開發語言,接下來的一層是Java開發套件以及Java API,一直到最下面Java Virtual Machine也就是Java虛擬機器了,Java之所以能跨越Sloaris、windows、linux等平台,靠的就是Java虛擬機器來實現。
Sun公司建立了第一個Servlet容器,即Java Web Server, 但JWS只是為了示範Servlet的相應功能,所以其很不穩定。與此同時,ASF建立了JServ項目,一個能夠與apache整合起來的servlet容器。1999年,Sun把JWS捐給了ASF,於是兩個項目合二為一,即今天Tomcat的前身。第一個tomcat版本是Tomcat 3.x系列,而發佈於2001年Tomcat4.0則是在此前基礎上進行了重新設計和實現,其代碼項目被命名為Catalina。Tomcat不是一個完整意義上的J2EE伺服器,它甚至都沒有提供對哪怕是一個主要Java EE API的實現,比如EJB、JMS、JMX、JavaMail等,但由於遵守apache開源協議,tomcat卻又為眾多的Java應用程式伺服器嵌入自己的產品中構建商業的Java應用程式伺服器,如JBoss和JOnAS。
儘管Tomcat對Jave EE API的實現並不完整,然而很企業也在漸漸拋棄使用傳統的J2EE技術(如EJB)轉而採用一些開源組件來構建複雜的應用。如Structs、Spring和Hibernate,而Tomcat能夠對這些組件實現完美的支援。這也是tomcat比較流行的原因,當然除了開源項目實現,還有眾多的商業實現,比如IBM的WebSphere、Oracle收購的WebLogic、Glassfish、被redhat收購的Jboss
JAVA 從何說起