第 1 章 走近 Java
前言
Java 的技術體系主要是由支撐 Java 程序運行的虛擬機、爲各開發領域提供接口支持的 Java API、Java 編程語言及許許多多的第三方 Java 框架(如 Spring 和 Struts 等)構成。
關於 Java 虛擬機的資料較少只要是因爲 Java 開發技術的一個重要有點致使的:在虛擬機層面隱藏了底層技術的複雜性以及機器與操做系統的差別性。運行程序的物理機器狀況千差萬別,而 Java 虛擬機則在千差萬別的物理機上面創建了統一的運行平臺,實現了在任意一臺虛擬機上編譯的程序能在任何一臺虛擬機上正常運行。
隨着 Java 技術的不斷髮展,它被應用於愈來愈多的領域之中。其中一些領域,如電力、金融、通訊等,對程序的性能、穩定性和可擴展性方面都有極高的要求。因此,瞭解虛擬機的運行也是必要的。
在絕大多數狀況下,提高硬件效能沒法等比例的提高程序的性能和併發能力,有時甚至可能對程序的性能沒有任何改善做用。這裏面有 Java 虛擬機的緣由:爲了達到爲全部硬件提供一致的虛擬機平臺的目的,犧牲了一些硬件相關的性能特性。更重要的人爲緣由:開發人員若是不瞭解虛擬機的一些技術特性的運行原理,就沒法寫出最適合虛擬機運行和可自優化的代碼。java
本章主要內容
概述
Java 技術體系
Java 發展史
展望 Java 技術的將來
實戰:本身編譯 JDK
1.1 概述
Java 不只僅是一門編程語言,它仍是一個由一系列計算機軟件和規範造成的技術體系,這個技術體系提供了完整的用於軟件開發和跨平臺部署的支持環境,並普遍應用於嵌入式系統、移動終端、企業服務器和大型機等各類場合。
Java 能得到如此普遍的承認,除了由於它擁有一門結構嚴謹、面向對象的編程語言以外,還有許多不可忽略的優勢:它擺脫了硬件平臺的束縛,實現了「一次編寫,處處運行」的理想;它提供了一種相對安全的內存管理和訪問機制,避免了絕大部分的內存泄漏和指針越界問題;它實現了熱點代碼檢測和運行時編譯及優化,這使得 Java 應用能隨着運行時間的增長而得到更高的性能;它有一套完善的應用程序接口,還有無數的來自商業機構和開源社區的第三方類庫來幫助實現各類各樣的功能。。。。。。 Java 所帶來的的這些好處讓程序的開發效率獲得了很大的提高。web
1.2 Java 技術體系
Java 技術體系包括了一下幾個組成部分:編程
- Java 程序設計語言
- 各類硬件平臺上的 Java 虛擬機
- Class 文件格式
- Java API 類庫
- 來自商業機構和開源社區的第三方 Java 類庫。
圖 Java技術體系所包含的內容
小程序
把 Java 程序設計語言、Java 虛擬機、Java API 類庫這三部分統稱爲 JDK(Java Development Kit),JDK 是用於支持 Java 程序開發的最小環境。
把 Java API 類庫中的 Java SE API 子集和 Java 虛擬機這兩部分統稱爲 JRE (Java Runtime Environment),JRE 是支持 Java 程序運行的標準環境。
若是按照技術所服務的領域來劃分,或者說按照 Java 技術關注的重點業務領域來劃分,Java 技術體系能夠分爲四個平臺,分別是:安全
- Java Card:支持一些 Java 小程序(Applets)運行在小內存設備(如智能卡)上的平臺。
- Java ME (Micro Edition):支持 Java 程序運行在移動終端(手機、PDA)上的平臺,對 Java API 有所精簡,並加入了針對移動終端的支持,這個版本之前稱爲 J2ME。
- Java SE (Standard Edition):支持面向桌面級應用(如 Windows 下的應用程序)的 Java 平臺,提供了完整的 Java 核心 API ,這個版本之前稱爲 J2SE。
- Java EE (Enterprise Edition):支持使用多層架構的企業應用(如 ERP、CRM 應用)的 Java 平臺,除了提供 Java SE API 以外,還對其作了大量的擴充並提供了相關的部署支持,這個版本之前稱爲 J2EE 。
1.3 Java 發展史
主要講述了 Java 從誕生到如今的發展,每一個版本新增的一些東西。服務器
1.4 展望 Java 技術的將來
1.4.1 模塊化
模塊化是解決應用系統與技術平臺愈來愈複雜、愈來愈龐大而產生的一系列問題的一個重要途徑。不管是開發人員仍是產品的最終用戶,都不但願爲了系統中的一小塊功能而不得不下載、安裝、部署及維護整套龐大的系統。最近幾年 OSGi 技術的迅速發展正說明了經過模塊化實現按需部署、下降複雜性和維護成本的需求是至關迫切的。架構
1.4.2 混合語言
Java 平臺上的多語言混合編程正成爲主流,沒中語言均可以針對本身擅長的方面更好地解決問題。併發
1.4.3 多核並行
CPU 硬件的發展方向已經從高頻率轉變爲多核心,隨着多核時代的來臨,軟件開發愈來愈關注並行編程的領域。框架
1.4.4 進一步豐富語法
不斷的擴充 Java 語法。編程語言
1.4.5 64 位虛擬機
幾年以前,主流的 COU 就開始支持 64 爲架構。Java 虛擬機也在很早以前就推出了支持 64 位系統的版本。但 Java 程序運行在 64 爲虛擬機上須要付出比較大的額外代價:首先是內存問題,因爲指針膨脹和各類數據類型對齊補白的緣由,運行於 64 位系統上的 Java 應用須要消耗不少的內存,一般要比 32 位系統額外增長 10% ~ 30% 的內存消耗;其次是多個機構的測試結果顯示,64 位虛擬機的運行速度在各個測試項上幾乎全面落後於 32 位虛擬機,二者大約有 15% 左右的性能差距。
1.5 實戰:本身編譯 JDK
想要一探 JDK 內部的實現機制,最便捷的路徑之一就是本身編譯一套 JDK 。經過閱讀和跟蹤調試 JDK 源碼去了解 Java 技術體系的原理,雖然門檻會高一些,但確定會比閱讀各類文章、書籍更加容易切近本質。另外,JDK 中的不少底層方法都是 Native 的,當須要跟蹤這些方法的運做或對 JDK 進行 Hack 的時候,都須要編譯一套本身的 JDK 。
1.5.1 獲取 JDK 源碼
1.5.2 系統需求
1.5.3 構建編譯環境
1.5.4 準備依賴項
1.5.5 進行編譯
1.6 本章小結
本章介紹了 Java 技術體系的過去、如今和將來的發展趨勢,並經過實踐的方式介紹瞭如何本身來獨立編譯一個 OpenJDK 7。