天天看點

深入了解JVM虛拟機(一):Java體系結構基本介紹目錄一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論 一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論

    這篇文章簡單介紹了一下這些東西:Java虛拟機、Java class檔案格式、Java應用程式設計接口(API)、Java程式設計語言。我們可以先大緻了解Java的網絡體系結構有哪些東西,具體是做什麼的,關于這些東西的細節會在後期其他部落格展開。

    這篇部落客要是對Java網絡體系結構進行一個總體簡單的介紹,之後的部落格内容也主要圍繞着這四個東西進行展開。對于《深入了解JVM虛拟機》這本書,我自己的學習目标就是學習并了解java程式的運作過程,一個java程式是如何運作起來的,個人能力有限,不過我會盡可能的把這本書的學習筆記做好。

目錄

一、為什麼使用Java

二、Java體系結構支柱

   2.1   平台無關性

   2.2   安全性

   2.3   網絡移動性

三、Java體系結構

四、結論

一、為什麼使用Java

    這個屬于開放性問題,就随便說說了  

    1)Java語言具有跨平台性

        軟體開發者面對的挑戰之一是逐漸增長的以網絡為核心的硬體環境,其包含的裝置越來越廣泛。一般網絡都有很多不同的裝置、不同的硬體體系、不同的作業系統,用于不同的用途。Java通過建立與平台無關的程式來解決這個問題。一個Java程式可以不需要修改就在很大範圍内的計算機和裝置上運作。和為一個特定的系統以及操作環境編譯的程式比起來,用Java編寫的平台無關的程式會更容易編寫、管理和維護,代價更低。

                                                                                                      ——摘自《深入JVM虛拟機》1.2網絡帶來的機遇與挑戰

    2)Java語言安全性很高

       Java程式源碼需要先編譯成位元組碼檔案(即.class檔案),而後才能被JVM虛拟機加載運作,這使得Java語言在安全性方面很高,如果不提供源代碼或源代碼注釋,普通程式員可能要花上幾年的時間才能夠破解 Java系統源代碼。

    3)Java具有廣泛性且代碼開源

      Java在某一個時間段,迅速發展成為了IT行業的主流,有許多的網站和軟體選擇了Java語言進行開發。當一個事物在世界的一個時間段裡成為了一個主流,時間越長,它的應用範圍就會越廣泛。于此同時,龐大基數的程式員們不斷釋出着許多優秀的開源代碼和庫,使得Java的生命力變得十分強壯。

     雖然Java語言也存在着很多缺點,但是在Web開發領域,Java語言算得上是無冕之王。數量龐大的使用者們促使Java在不斷的前進,形成了一個環境良好的生态圈。

二、Java體系結構支柱

    在介紹Java體系結構之前,我們先了解一下,什麼是Java體系結構支柱?

                                那就是:平台無關性、安全性、網絡移動性 

2.1    平台無關性

        平台無關性指的是:一種語言在計算機上的運作可以不受平台的限制,一次編譯,到處執行。

       20世紀90年代,硬體領域出現了單片式計算機系統,這種價格低廉的系統一出現就立即引起了自動控制領域人員的注意,因為使用它可以大幅度提升消費類電子産品(如電視機頂盒、面包烤箱、行動電話等)的智能化程度。Sun公司為了搶占市場先機,在1991年成立了一個稱為Green的項目小組,帕特裡克、詹姆斯·高斯林、麥克·舍林丹和其他幾個工程師一起組成的工作小組在加利福尼亞州門洛帕克市沙丘路的一個小工作室裡面研究開發新技術,專攻計算機在家電産品上的嵌入式應用。

      由于C++所具有的優勢,該項目組的研究人員首先考慮采用C++來編寫程式。但對于硬體資源極其匮乏的單片式系統來說,C++程式過于複雜和龐大。另外由于消費電子産品所采用的嵌入式處理器晶片的種類繁雜,如何讓編寫的程式跨平台運作也是個難題。為了解決困難,他們首先着眼于語言的開發,假設了一種結構簡單、符合嵌入式應用需要的硬體平台體系結構并為其制定了相應的規範,其中就定義了這種硬體平台的二進制機器碼指令系統(即後來成為“位元組碼”的指令系統),以待語言開發成功後,能有半導體晶片生産商開發和生産這種硬體平台。對于新語言的設計,Sun公司研發人員并沒有開發一種全新的語言,而是根據嵌入式軟體的要求,對C++進行了改造,去除了留在C++的一些不太實用及影響安全的成分,并結合嵌入式系統的實時性要求,開發了一種稱為Oak的面向對象語言。

                                                                                                                                                               ——摘自百度百科

    上面一段話中的Oak,就是Java的前身啦,最開始設計Java時,Java的定位就是一門跨平台的語言。Java最大的優勢是它實作了:“一次編譯,到處運作”的機制。而這樣的機制是如何實作的呢?

                                                                  實作機制的關鍵就在于JVM虛拟機了。

     Java虛拟機屏蔽了與具體作業系統平台相關的資訊,使得Java程式隻需生成在Java虛拟機上運作的目标代碼(位元組碼),就可以在多種平台上不加修改地運作。如果需要在不同的平台上運作Java程式,則需要先實作對應平台的JVM虛拟機。JVM幫助Java語言屏蔽了底層的細節,使得Java在運作時,不需要考慮關于平台的因素,幫助Java解耦,實作了Java語言的平台無關性。

                                                           那麼,Java虛拟機是如何幫助Java進行解耦的呢?

     其中,Java虛拟機規範定義了每一種資料類型的取值範圍,但是卻沒有定義它們的位寬,即存儲這些類型的值所需的展位寬度,位寬是由具體的虛拟機實作的設計者所決定的。java虛拟機和本地方法關聯起來,通過本地方法來擷取作業系統資源,來實作java虛拟機内class檔案的需求,具體的位寬換算由虛拟機實作,是以Java程式在運作過程中,無需考慮平台的因素,因為底層細節都由虛拟機進行處理。

深入了解JVM虛拟機(一):Java體系結構基本介紹目錄一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論 一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論

2.2    安全性

    Java程式源碼需要先編譯成位元組碼檔案(即.class檔案),而後才能被JVM虛拟機加載運作,這使得Java語言在安全性方面很高,如果不提供源代碼或源代碼注釋,普通程式員可能要花上幾年的時間才能夠破解 Java系統源代碼。

2.3    網絡移動性

        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平台。

                                                                                                                                                            ——摘自百度百科

                                                                        Java技術在網絡環境下非常有用

        其中一個關鍵的理由就是,用Java建立的可執行二進制程式,能夠不加改變地運作于多個平台(Java的平台無關性)。這一點在網絡化環境中尤為重要,因為大多數網絡通常都是由各種各樣不同種類的計算機和裝置互聯而成。

        比如,網絡上可能連接配接了藝術創作部門的Macintosh計算機、工程部門的UNIX工作站以及随處叮見的運作Windows的PC。

        盡管這種情形下公司内部的各種計算機和裝置可以共享彼此的資料,但是它仍然需要大量的管理工作。像這樣一個網絡,要求系統管理者必須随時維持運作于不同種類計算機上的同一個程式,在更新的時候,要根據特定于它所運作的不同平台進行版本同步更新。如果程式能夠不加修改地運作于網絡上的任何計算機,而不管該計算機是什麼種類,那麼這将極大地減輕系統管理者的工作。特别是當這樣的程式是通過網絡傳遞的時候,效果更加顯著。

三、Java體系結構

深入了解JVM虛拟機(一):Java體系結構基本介紹目錄一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論 一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論

    Java體系結構包括四個獨立但相關的技術:Java虛拟機、Java class檔案格式、Java應用程式設計接口(API)、Java程式設計語言。

3.1 Java虛拟機

3.1.1 Java實作平台無關性的原理

   同2.1

3.1.2 Java虛拟機的主要任務

   主要任務:裝載class檔案并執行其中的位元組碼,幫助Java解耦。

3.1.3 Java虛拟機的組成部分

深入了解JVM虛拟機(一):Java體系結構基本介紹目錄一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論 一、為什麼使用Java二、Java體系結構支柱三、Java體系結構四、結論

       類裝載器:負責動态加載Java類到Java虛拟機的記憶體空間中。

       執行引擎: 解釋和編譯執行java代碼。

3.2 Java應用程式設計接口(API)

    Java API(Application Programming Interface)是什麼?

    是一些預先定義的函數,也是Java基本類庫,例如java.util包,java.lang.String等等,都屬于Java API。運作Java程式時,虛拟機會裝載程式的class檔案所使用的Java API class檔案。所有被裝載的class檔案(包括從應用程式中和從Java API中提取的)和所有已經裝載的動态庫(包含本地方法)共同組成了在Java虛拟機上運作的整個程式。

    Java虛拟機和Java API一起組成了java的運作“平台”,也稱為Java運作時系統,所有的Java程式都在平台上編譯。

    Java API是運作庫的集合,Java API的class檔案會調用本地方法,提供了标準的調用接口,是以Java程式直接通過調用Java API對資源進行處理,而不直接調用本地方法,而這也是Java的平台無關性的支撐之一。

    注意:盡管JRE(Java Runtime Environment)是Java平台的一部分,但JRE不應與Java平台合并。原因是,Java平台是一般的東西,但JRE是一個SPECIFIC元件,就像JDK(Java Development Kit)一樣。

    除了對平台無關性的推動之外,Java API在Java安全性模型方面也做出了貢獻。當Java API的方法進行任何有潛在危險的操作(比如進行本地磁盤寫操作)之前,都會通過查詢安全管理器來檢驗是否得到了授權。安全管理器是一個為應用程式提供自定義安全政策的特殊對象。例如,安全管理器能夠禁止對本地磁盤的通路。Java 1.2版本以前,如果應用程式通過調用Java API的方法來請求對本地磁盤進行寫操作,那個API方法會首先請求安全管理器進行驗證。當從安全管理器得知磁盤通路被禁止後,Java API會拒絕執行寫操作。在Java1.2版本中,安全管理器的工作被通路控制器所取代。通路控制器是一個類,該類用來執行棧檢驗,以決定是否準許某種操作(考慮到向下相容問題,安全管理器在Java 1.2版本中仍然存在)。通過強制執行安全管理器和通路控制器建立的安全政策,Java API促進了安全環境的建立,在這種安全環境中,可以運作具有潛在危險的代碼。

                                                                                                                           ——摘自《深入JVM虛拟機》1.3.4 Java API

 3.3 Java class檔案

    java class是一種二進制流檔案,java程式通過編譯,将内部資訊轉換為class檔案,使其可以被JVM快速的加載至記憶體, 并且占據較少的記憶體空間。

    任務:為Java程式提供獨立于底層主機平台的二進制形式的服務(通常情況下,一個平台的二進制可執行檔案不能在其他平台上工作)

四、結論

    Java系統結構設計的核心并不僅僅在于使程式員更有效率,使程式更健壯,而在于為新興的以網絡為中心的計算環境提供了一種工具。Java系統結構為新的面向網絡的軟體結構鋪出了一條道路,這種軟體架構充分利用了Java對于代碼和對象的網絡移動性的支援。

                                                                                                                                   ——摘自《深入JVM虛拟機》1.5 結論