轉載: 深刻Java虛擬機(1)——Java體系結構
Java的面向網絡的核心就是Java虛擬機,它支持Java面向網絡體系結構三大支柱:平臺無關性、安全性和網絡移動性。java
Java虛擬機是一臺抽象的計算機,其規範定義了每一個Java虛擬機都必須實現的特性,可是爲每一個特定實現都留下了不少選擇。c++
Java虛擬機的主要任務是裝載class文件而且執行其中的字節碼。裝載類由類裝載器(class loader)完成,它能夠從程序和API中裝載class文件。JavaAPI中只有程序執行時須要的那些類纔會被裝載。字節碼由執行引擎來執行。編程
第二種比第一種執行引擎效率上要高不少,執行速度也更快,但相對的缺點就是內存消耗很大。當內存消耗劇烈的時候,jvm就會出現異常。在這種狀況下,即時編譯器第一次被執行的字節碼會被編譯成本地機器代碼,編譯出的本地機器代碼也會被緩存,當方法之後被調用時候能夠重用。bootstrap
第三種引擎,自適應優化器,在這種方法裏,虛擬機開始的時候解釋字節碼,可是會監視運行種的程序的活動,而且記錄下使用最頻繁的代碼段。程序運行時,虛擬機只把那些活動最頻繁的代碼編譯成本地代碼,其餘代碼因爲使用的並不很頻繁,繼續保留字節碼由虛擬機繼續即時它們。一個自適應的優化器可使用java虛擬機種的80%-90%的時間裏執行被優化的本地代碼,而只須要編譯10%-20%對性能有影響的代碼。api
當java虛擬機是由主機操做系統上的軟件實現的時候,java程序經過調用本地方法native mehod 和主機進行交互。java中有兩種方法,java方法和本地方法。java方法是由java語言編寫,以後編譯成字節碼,存儲在class文件中的。本地方法是由其餘語言好比c\c++\彙編語言編寫的,編譯器和處理器的相關代碼。緩存
在Java虛擬機上,存在着多個類裝載器,一個java應用程序可使用兩種類裝載器,啓動bootstrap類裝載器和用戶定義的類裝載器。啓動類裝載器是java虛擬機實現的一部分。啓動裝載器一般使用默認的方式從本地磁盤中裝載類,包括java api類。啓動類裝載器也被叫作原始類裝載器、系統類裝載器或者默認類裝載器。安全
Java class文件是一個能夠跨平臺的二進制文件,是經過java虛擬機來實現編譯的。網絡
平臺無關性:一般狀況下,一個平臺上的二進制可執行文件不能在其餘平臺上工做。而Java class文件是能夠運行在任何支持Java虛擬機制硬件平臺和操做系統上的二進制文件。多線程
網絡適應性:class文件設計的緊湊,所以它們能夠快速地在網絡上傳送。其次因爲Java程序是動態連接和動態擴展的,class文件能夠在須要的時候才下載。jvm
Java API是運行庫的集合,它提供一套訪問主機系統資源的標準方法。Java API是相對安全的,它是保證平臺無關性的前提,由於Java虛擬機和Java API class文件是任何Java平臺都要實現的必要部分。在一個平臺可以支持Java程序之前,必須在這個特定平臺上明確地實現API的功能。
儘管Java是爲網絡而生的,但許多人使用Java寫程序還多是由於想要利用Java程序設計語言的優點:
1.面向對象
2.多線程
3.結構化錯誤處理
4.垃圾收集
5.動態鏈接
6.動態擴展