誰都沒想到 Sun 公司技術如此的強大,卻在之后的歲月里逐漸走向隕落,因為不懂銷售和運營,導致公司財務逐漸出現虧損,在 2009 年,Oracle 公司以現金方式收購 Sun 公司,交易價格達 74 億美元。
一、摘要
眾所周知,JAVA 經過多年的發展,已經從一門單純的計算機編程語言,發展成了一套成熟的軟件解決方案。從互聯網到企業平臺,Java 是目前使用最廣泛的編程語言。
以下這段內容是來自 Java 的官方介紹!
從筆記本電腦到數據中心,從游戲控制臺到科學超級計算機,從手機到互聯網,Java 無處不在!
無論是是互聯網公司還是傳統的企業,在研發數字化平臺系統時,世界上絕大部分的公司基本上都會首選采用 Java 來開發,以助力企業的數字化轉型和生產效率的提升,原因就不多說了,安全、穩定、高性能、跨平臺等等,其實還有一個很大的優勢:好招人,哈哈哈~~
而 Java 之所以如此有魅力,不僅限于它優秀的程序語言設計,其中還有一個很重要的原因得益于它的虛擬機平臺設計,通過它的虛擬機可以輕松實現應用程序跨平臺運行,實現“一次編寫,到處運行”的目標,并且還可以取得不錯的運行效率。
二、Java 簡介
在介紹虛擬機之前,我們還是簡單的回顧一下 Java 的發展故事。
Java 最早是由 SUN 公司的一個小工程師團隊在上個世紀 90 年代初開發的一種編程語言,其中詹姆斯·高斯林是項目負責人(人稱 Java 之父),編程語言最初被命名為 Oak,以他們的辦公室外的橡樹而命名,后來因為 Oak 已經被人注冊了,因此重新改名成 Java。
在此,我們附上一張 Java 之父的光輝圖片!
圖片
當時的目標是將其用于開發數字有線電視行業的嵌入式應用程序,例如機頂盒、智能電視等數字設備,實現無障礙的運行。結果推出以后,市場沒啥反響。4 年后,技術小組不得不解散。
但也就在此時,互聯網剛剛崛起,恰巧這時 MarkArdreesen 開發的 MosAIc 和.NETscape 啟發了 Oak 項目組成員,他們利用 Java 編寫了 HotJava 瀏覽器,HotJava 擁有了在頁面中運行 Java 代碼的能力,可以無障礙的運行在各個電腦設備上,這個效果得到了 Sun 公司首席執行官 ScottMcNealy 的支持,觸發了 Java 進軍 Internet 的決心。
這在當時引起了不小的轟動,人們從中似乎看到了互聯網未來該有的樣子,一時間,Java 受到了眾多廠商和開發者的追捧。于是趁熱打鐵,Sun 在 1996 年正式發布了 JDK1.0,當時最主要的十個操作系統廠商宣布,將在它們的系統中支持 Java 程序的運行,從此在互聯網高速發展中大殺四方。
Java 之所以能在互聯網發展中獲得廣泛的開發者支持,一個很重要的原因就是它可以實現“一次編寫,到處運行”的效果,極大的省去了軟件開發工作量,能實現這種效果主要得益于 Java 的架構理念設計。
像 C、C++ 等編程語言,代碼是直接編譯成機器碼執行,雖然很快,但是不同的平臺(x86、ARM等) CPU 的指令集也不同,每次開發一個應用程序需要編譯出每一種平臺的對應機器碼,非常麻煩。
Java 則不同,它會將代碼編譯成一種“字節碼”,它類似于抽象的 CPU 指令,然后虛擬機負責加載字節碼,根據不同的平臺編譯成對應的機器碼并執行,這樣就可以實現了“一次編寫,到處運行”的效果。
圖片
當然,對于虛擬機,需要針對每個平臺分別開發,為了保證不同平臺、不同公司開發的虛擬機都能正確執行 Java 字節碼,SUN 公司制定了一系列的 Java 虛擬機規范。從實踐的角度來看,虛擬機的兼容性做得非常好,低版本的 Java 字節碼完全可以正常運行在高版本的虛擬機上。
整個 JDK 內部結構,可以用如下圖來概括(圖片來自于廖雪峰的Java介紹)
圖片
JDK、JRE 和 JVM 三者之間的關系,可以用如下內容來簡要描述。
- JDK(Java Development Kit):指的是 Java 語言的軟件開發工具包,包括編譯器、調試器、Java API 類庫、Java 虛擬機等內容,通常用于開發環境
- JRE(Java Runtime Environment):指的是 Java 運行時環境,包括 Java API 類庫、Java 虛擬機等內容,通常用于運行 Java 應用程序,通常用于生產環境
- JVM(Java Virtual machine):指的是 Java 虛擬機,用于在不同的平臺上執行 Java 應用程序
可以清晰的看到,JVM 是 Java 應用程序能實現跨平臺運行的核心。因此,了解和學習 JVM 相關的知識,有助于開發者對 Java 相關技術有著更全面的認識。
在操作系統的命令行,輸入java -version,即可看到當前 JDK 采用的是哪種版本的虛擬機。
圖片
三、虛擬機簡介
說起 Java 虛擬機,許多開發者可能首先會想到 HotSpot 虛擬機,正如上文的截圖部分。
實際上 Java 虛擬機除了 HotSpot 之外,還有 Sun Classic VM、Exact VM、BEA JRockit VM、IBM J9 VM等等,虛擬機的發展過程,可以用百花齊放這四個字來概括。
3.1、Sun Classic VM
在 1996 年,Sun 發布 JDK 1.0 時,其中自帶的虛擬機就是 Classic VM。這款虛擬機使用的是純解釋器的方式來執行 Java 代碼,簡單的說就是邊解釋邊運行代碼,并非像現在這樣通過編譯器的方式來執行代碼(先編譯、后執行)。在 Sun Classic 虛擬機中,解釋器與編譯器無法共同存在,因此 Java 應用程序執行速度上肯定快不起來,只能說夠用。
在 1998 年,Sun 在發布 JDK 1.2 時,同時也公布了一款名為 Exact VM 的虛擬機,這款虛擬機嘗試解決了 Classic VM 遇到的所有問題。它的執行系統解決了 Classic VM 存在的解釋器和編譯器無法同時工作的問題,同時還具備了一些現代高性能處理器的特性,如:兩級即時編譯、準確式內存管理等。
但可惜的是,這款虛擬機一直沒有真正被大規模使用過,此時 Sun Classic VM 依然作為默認的 Java 虛擬機。
3.2、HotSpot VM
在 2000 年,Sun 在發布 JDK 1.3 時,公布將 HotSpot VM 作為默認的 Java 虛擬機,也就是大家廣為流傳的 Java 虛擬機。
實際上,這個虛擬機并不是由 Sun 公司原生開發的,而是由一個叫 Longview Technologies 公司開發的,Sun 公司注意到了這款虛擬機在 JIT 編譯上的許多優秀成果,于 1997 年收購了 Longview Technologies 公司,從而獲得了 HotSpot VM 的所有權。
HotSpot VM 不僅僅有前面說到兩款虛擬機的優點,也有許多自己的新技術,例如:熱點探測技術。熱點探測技術指的是通過執行計數器找出最具優化價值的代碼,然后通知 JIT 編譯器以方法為單位進行深度優化編譯。
其實 Exact VM 中也有類似的技術,但最終還是選擇了 HotSpot 作為默認的虛擬機。
HotSpot VM 作為默認的 Java 虛擬機之后,直到現在,依然是我們最常用的虛擬機,可見 HotSpot VM 的生命力之頑強!
3.3、BEA JRockit / IBM J9 VM
前面說的是 Sun 公司研發的虛擬機,但除了 Sun 公司之外,其他組織、公司也研發過不少的虛擬機實現,其中最著名的就是 BEA 公司的 JRockit VM 和 IBM 公司的 J9 VM 了。
JRockit VM 是除 HotSpot 之外另一款響當當的虛擬機,BEA 公司在 2002 年收購的了此虛擬機的開發商。這款虛擬機在相當一段時間里獲稱世界上速度最快的 Java 虛擬機,它是一款專注于服務器端應用的虛擬機,并且它的垃圾收集算法相比其它所有虛擬機表現更佳;此外,其提供的 MissionControl 服務套件也十分強大。
IBM 公司的 J9 VM 則是一款比較通用的虛擬機,其定位應用于從服務端到桌面應用,再到嵌入式的多用途虛擬機。IBM 公司開發 J9 VM 的目的是將其作為 IBM 公司各種 Java 產品的執行平臺。稍有不同的是,IBM J9 VM 都只能跟 IBM 產品一起使用,雖然不存在技術限制,但是需要單獨的商業許可證。
J9 VM 的性能水平大致跟 HotSpot VM 是一個檔次的,在一些場景下,有時 HotSpot VM 快些,有時 J9 VM 快些。
3.4、其它 JVM
HotSpot、JRockit 和 J9 這三個虛擬機,曾經在很長的時間并稱三大主流 JVM,可以說是 Java 虛擬機發展史上比較耀眼的部分。除此之外,其實還有各種各樣的小范圍使用的虛擬機。
例如 Azul VM 和 BEA Liquid VM 的專用商業虛擬機,性能非常強悍,可以管理至少數十個 CPU 和數百 GB 的內存資源,還提供在巨大內存范圍內實現可控 GC 時間的垃圾收集器等等,這些虛擬機只運行在特定硬件平臺,因此要求也比較高。
此外還有許許多多其他的虛擬機存在,例如:Apache Harmony、google Android Dalvik VM、Mircosoft JVM 等等,都在各自領域發揮作用。
3.5、Oralce
誰都沒想到 Sun 公司技術如此的強大,卻在之后的歲月里逐漸走向隕落,因為不懂銷售和運營,導致公司財務逐漸出現虧損,在 2009 年,Oracle 公司以現金方式收購 Sun 公司,交易價格達 74 億美元。
此前,Oracle 公司在 2008 年收購了 BEA 公司,獲得了 JRocket VM 的所有權;這意味著 JRockit 與 HotSpot 同屬于 Oracle 所有。
實際上,現在 JDK1.8 的 HotSpot VM 已經是以前的 HotSpot VM 與 JRockit VM 的合并版,也就是傳說中的“HotRockit”,只是產品里名字還是叫 HotSpot VM。
后續的 JVM 發展,相信會越來越好,我們拭目以待!
四、小結
本文主要圍繞 Java 的發展歷史,對虛擬機的誕生歷史做了一次知識總結,在后續的文章中,我們會對 JVM 相關知識進行總結和分享,如果有描述不對的地方,歡迎大家留言指出,不勝感激!
五、參考
1.https://www.liaoxuefeng.com/wiki/1252599548343744/1255876875896416
2.https://www.cnblogs.com/xrq730/p/4826691.html
3.https://www.cnblogs.com/chanshuyi/p/jvm_serial_02_the_history_of_jvm.html