深刻理解Java虛擬機-走近Java

世界上並無完美的程序,但咱們並不所以而沮喪,由於寫程序原本就是一個不斷追求完美的程。java

概述

Java不只僅是一門編程語言,仍是一個由一系列計算機軟件和規範造成的技術體系,這 個技術體系提供了完整的用於軟件開發和跨平臺部署的支持環境,並普遍應用於嵌入式系統、移動終端、企業服務器、大型機等各類場合,如圖1-1所示。時至今日,Java技術體系已 經吸引了900多萬軟件開發者,這是全球最大的軟件開發團隊。使用Java的設備多達幾十億 臺,其中包括11億多臺我的計算機、30億部移動電話及其餘手持設備、數量衆多的智能卡, 以及大量機頂盒、導航系統和其餘設備。程序員

Java能得到如此普遍的承認,除了它擁有一門結構嚴謹、面向對象的編程語言以外,還 有許多不可忽視的優勢:它擺脫了硬件平臺的束縛,實現了"一次編寫 ,處處運行"的理想;它提供了一個相對安全的內存管理和訪問機制,避免了絕大部分的內存泄露和指針越界問 題;它實現了熱點代碼檢測和運行時編譯及優化,這使得Java應用能隨着運行時間的增長而 得到更高的性能;它有一套完善的應用程序接口,還有無數來自商業機構和開源社區的第三 方類庫來幫助它實現各類各樣的功能……Java所帶來的這些好處使程序的開發效率獲得了很 大的提高。做爲一名Java程序員,在編寫程序時除了盡情發揮Java的各類優點外,還應該去了解和思考一下Java技術體系中這些技術特性是如何實現的。認識這些技術運做的本質,是 本身思考"程序這樣寫好很差"的基礎和前提。當咱們在使用一種技術時,若是再也不依賴書本和他人就能獲得這些問題的答案,那纔算上升到了"不惑"的境界。編程

本書將與讀者一塊兒分析Java技術中最重要的那些特性的實現原理。在本章中,咱們將重點介紹Java技術體系內容以及Java的歷史、如今和將來的發展趨勢。小程序

Java技術體系

從廣義上講,Clojure、JRuby、Groovy等運行於Java虛擬機上的語言及其相關的程序都 屬於Java技術體系中的一員。若是僅從傳統意義上來看,Sun官方所定義的Java技術體系包括如下幾個組成部分:安全

  • Java程序設計語言ruby

  • 各類硬件平臺上的Java虛擬機服務器

  • Class文件格式微信

  • Java API類庫架構

  • 來自商業機構和開源社區的第三方Java類庫編程語言

圖1-2展現了Java技術體系所包含的內容,以及JDK和JRE所涵蓋的範圍。

以上是根據各個組成部分的功能來進行劃分的,若是按照技術所服務的領域來劃分,或者說按照Java技術關注的重點業務領域來劃分,Java技術體系能夠分爲4個平臺,分別爲:

  • Java Card : 支持一些Java小程序( Applets ) 運行在小內存設備(如智能卡)上的平臺。

  • Java ME ( Micro Edition ) : 支持Java程序運行在移動終端(手機、 PDA ) 上的平臺,對 Java API有所精簡,並加入了針對移動終端的支持,這個版本之前稱爲J2ME。

  • Java SE ( Standard E d i t i o n ) : 支持面向桌面級應用(如Windows下的應用程序)的Java平臺,提供了完整的Java核心API,這個版本之前稱爲J2SE。

  • Java EE ( Enterprise Edition): 支持使用多層架構的企業應用(如ERP、CRM應用)的 Java平臺,除了提供Java SE API外 ,還對其作了大量的擴充- 並提供了相關的部署支持,這 個版本之前稱爲J2EE。

Java發展史

從第一個Java版本誕生到如今已經有18年的時間裏。滄海桑田一瞬間,轉眼18年過去了,在圖1-3所展現的時間線中,咱們看到JDK已經發展到了1.7版。在這18年裏還誕生了無數和Java相關的產品、技術和標準。如今讓咱們走入時間隧道,從孕育Java語言的時代開始,再來回顧一下Java的發展軌跡和歷史變遷。

具體能夠參考個人這篇博客Java發展歷程

Java虛擬機發展史

上一節咱們從整個Java技術的角度觀察了Java技術的發展,許多Java程序員都會潛意識地把它與Sun公司的HotSpot虛擬機等同看待,也許還有一些程序員會注意到BEA JRockit和 IBM J9 ,但對JVM的認識不只僅只有這些。

從1996年初Sun公司發佈的JDK 1.0中所包含的Sun Classic VM到今天,曾經涌現、浬滅過許多或經典或優秀或有特點的虛擬機實現,在這一節中,咱們先暫且把代碼與技術放下,一 起來回顧一下Java虛擬機家族的發展軌跡和歷史變遷。

  1. Sun Classic / Exact VM

  2. Sun HotSpot VM

  3. Sun Mobile-Embedded VM / Meta-Circular VM

  4. BEA JRockit / IBM J9 VM

  5. Azul VM / BEA Liquid VM

  6. Apache Harmony / Google Android Dalvik VM

  7. Microsoft JVM 及其餘

展望Java技術的將來

在2005年,Java語言誕生10週年的SunOne技術大會上,Java語言之父James Gosling作了一場題爲"Java技術下一個十年"的演講。筆者不具有James Gosling博士那樣高屋建瓴的視角 ,這裏僅從Java平臺中幾個新生的但已經開始展示出蓬勃之勢的技術發展點來看一下後續 1〜2個JDK版本內的一些頗有但願的技術重點。

  1. 模塊化,模塊化是解決應用系統與技術平臺愈來愈複雜,愈來愈龐大而產生的一系列問題的一個重要途徑。最近幾年OSGI技術的迅速發展正說明了經過模塊化實現按需部署,下降複雜性和維護成本的需求是至關迫切的。

  2. 混合語言,今年原來越多語言運行在Java這個平臺上,例如Groovy,JRuby,Clojure等。試想一下,在一個項目中,並行處理使用Clojure語言編寫,展現層使用Jruby或Rails,中間層則是Java,每一個應用層將使用不一樣的語言來完成,並且,接口對每一層的開發都是透明的,各類語言之間的交互不存在任何困難,由於它們最終都運行在一個虛擬機上。

  3. 多核並行,引入java.util.concurren包,可以輕鬆地利用多個CPU核心提供的計算資源完成一個複雜的計算任務。

  4. 進一步豐富語法,JDK不斷升級改進語法

  5. 隨着主流的CPU開始支持64位架構,JAVA虛擬機也在很早以前就推出了支持64位系統的版本

實戰:本身編譯JDK

想要一探 JDK 內部的實現機制,最便捷的路徑之一就是本身編譯一套 JDK 。經過閱讀和跟蹤調試 JDK 源碼去了解 Java 技術體系的原理,雖然門檻會高一些,但確定會比閱讀各類文章、書籍更加容易切近本質。另外,JDK 中的不少底層方法都是 Native 的,當須要跟蹤這些方法的運做或對 JDK 進行 Hack 的時候,都須要編譯一套本身的 JDK 。

本章小結

本章介紹了 Java 技術體系的過去、如今和將來的發展趨勢,並經過實踐的方式介紹瞭如何本身來獨立編譯一個 OpenJDK 7。

原文連接:

https://thinkwon.blog.csdn.net/article/details/103804387

本文分享自微信公衆號 - 源代碼社區(ydmsq666)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索