### Java體系結構
Java體系結構包括四個獨立但相關的技術:
1.Java程序設計語言
2.Java class文件格式
3.Java應用編程接口(API)
4.Java虛擬機
當編寫并運行一個Java程序時,就同時使用了這四種技術。用Java程序設計語言編寫源代碼,把它編譯成Java class文件,然后在java虛擬機中運行class文件。當編寫程序時,通過調用實現了Java應用編程接口(API)類中的方法來訪問系統中資源如io、網絡內存等。當程序運行的時候它可以調用class文件中的實現的方法來滿足程序java api的調用。
### 一、Java虛擬機
Java的面向網絡的核心就是Java虛擬機,它支持Java面向網絡體系結構三大支柱:平臺無關性、安全性和網絡移動性。
Java虛擬機是一臺抽象的計算機,其規范定義了每個Java虛擬機都必須實現的特性,但是為每個特定實現都留下了很多選擇。
Java虛擬機的主要任務是裝載class文件并且執行其中的字節碼。裝載類由類裝載器(class loader)完成,它可以從程序和API中裝載class文件。JavaAPI中只有程序執行時需要的那些類才會被裝載。字節碼由執行引擎來執行。
Java虛擬機中的三種執行引擎
1、最簡單的執行引擎就是一次性解釋字節碼
2、另一種執行引擎更快,但是也更消耗內存,叫做“即時編譯器”(just-in-time compiler)
3、第三種執行引擎是自適應優化器
第二種比第一種執行引擎效率上要高很多,執行速度也更快,但相對的缺點就是內存消耗很大。當內存消耗劇烈的時候,jvm就會出現異常。在這種情況下,即時編譯器第一次被執行的字節碼會被編譯成本地機器代碼,編譯出的本地機器代碼也會被緩存,當方法以后被調用時候可以重用。
第三種引擎,自適應優化器,在這種方法里,虛擬機開始的時候解釋字節碼,但是會監視運行種的程序的活動,并且記錄下使用最頻繁的代碼段。程序運行時,虛擬機只把那些活動最頻繁的代碼編譯成本地代碼,其他代碼由于使用的并不很頻繁,繼續保留字節碼由虛擬機繼續即時它們。一個自適應的優化器可以使用java虛擬機種的80%-90%的時間里執行被優化的本地代碼,而只需要編譯10%-20%對性能有影響的代碼。
**Java虛擬機與主機交互**
當java虛擬機是由主機操作系統上的軟件實現的時候,java程序通過調用本地方法native mehod 和主機進行交互。java中有兩種方法,java方法和本地方法。java方法是由java語言編寫,之后編譯成字節碼,存儲在class文件中的。本地方法是由其他語言比如c\c++\匯編語言編寫的,編譯器和處理器的相關代碼。
**Java虛擬機上的類裝載器**
在Java虛擬機上,存在著多個類裝載器,一個java應用程序可以使用兩種類裝載器,啟動bootstrap類裝載器和用戶定義的類裝載器。啟動類裝載器是java虛擬機實現的一部分。啟動裝載器通常使用默認的方式從本地磁盤中裝載類,包括java api類。啟動類裝載器也被叫做原始類裝載器、系統類裝載器或者默認類裝載器。
### 二、Java class 文件
Java class文件是一個可以跨平臺的二進制文件,是通過java虛擬機來實現編譯的。
平臺無關性:通常情況下,一個平臺上的二進制可執行文件不能在其他平臺上工作。而Java class文件是可以運行在任何支持Java虛擬機制硬件平臺和操作系統上的二進制文件。
網絡適應性:class文件設計的緊湊,因此它們可以快速地在網絡上傳送。其次由于Java程序是動態鏈接和動態擴展的,class文件可以在需要的時候才下載。
### 三、Java API
Java API是運行庫的集合,它提供一套訪問主機系統資源的標準方法。Java API是相對安全的,它是保證平臺無關性的前提,因為Java虛擬機和Java API class文件是任何Java平臺都要實現的必要部分。在一個平臺能夠支持Java程序以前,必須在這個特定平臺上明確地實現API的功能。
### 四、Java程序設計語言
盡管Java是為網絡而生的,但許多人使用Java寫程序還可能是因為想要利用Java程序設計語言的優勢:
1.面向對象?
2.多線程?
3.結構化錯誤處理?
4.垃圾收集?
5.動態連接?
6.動態擴展
**參考書籍:《深入Java虛擬機 第二版》**
- 前言
- Java生成中間logo的二維碼(還可以加上二維碼名稱哦)
- Java我的高效編程之常用函數
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Java中synchronized的使用實例
- Java基礎之集合
- Java基礎之泛型
- Java基礎之枚舉妙用
- 那些年用過的一些前端框架
- 關于正則,那些年一直存在的疑惑解答(正則菜鳥不容錯過)
- 給pdf文件添加防偽水印logo(附工程源碼下載)
- SpringMVC+BUI實現文件上傳(附詳解,源碼下載)
- Java異常封裝(自己定義錯誤碼和描述,附源碼)
- javaweb異常提示信息統一處理(使用springmvc,附源碼)
- 關于Java,那些我心存疑惑的事(不斷更新中...)
- 深入Java虛擬機(1)——Java體系結構
- 深入Java虛擬機(2)——Java的平臺無關性
- 深入Java虛擬機(3)——安全
- 深入Java虛擬機(4)——網絡移動性
- Linux文件編輯命令詳細整理
- 阿里云服務器云數據庫免費體驗(Java Web詳細實例)
- 項目部署、配置、查錯常用到的Linux命令
- Shell腳本了解
- Ajax原理學習
- linux下安裝apache(httpd-2.4.3版本)各種坑
- JSP九大內置對象
- Servlet再度學習
- 開發人員系統功能設計常用辦公軟件分享
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener問題解決
- tomcat內存溢出解決,java.lang.OutOfMemoryError: PermGen space
- 《Java多線程編程核心技術》推薦
- 關于跳槽,是我心浮氣躁?還是我確實該離開了?
- Java I/O學習(附實例和詳解)
- Java經典設計模式之五大創建型模式(附實例和詳解)
- Java經典設計模式之七大結構型模式(附實例和詳解)
- Java經典設計模式之十一種行為型模式(附實例和詳解)
- Java內存管理
- SQL實例整理
- 數據庫面試常問的一些基本概念