膜拜!阿里內部都在學習的五大深入理解Java虛擬機器PDF,簡直強無敵

Java領域指導者發表於2020-09-23

前言

Java是目前使用者最多、使用範圍最廣的軟體開發技術,Java的技術體系主要由支撐Java程式執行的虛擬機器、提供各開發領域介面支援的Java類庫、Java程式語言及許許多多的第三方Java框架(如Spring、 MyBatis等) 構成。在國內,有關Java類庫API、Java語言語法及第三方框架的技術資料和書籍非常豐富,相比而言,有關Java虛擬機器的資料卻顯得異常貧乏。

這種狀況很大程度上是由Java開發技術本身的一個重要優點導致的:在虛擬機器層面隱藏了底層技術的複雜性以及機器與作業系統的差異性。執行程式的物理機千差萬別,而Java虛擬機器則在千差萬別的物理機上面建立了統一的執行平臺,實現了在任意一臺Java虛擬機器上編譯的程式,都能在任何其他Java虛擬機器上正常執行。這一極大的優勢使得Java應用的開發比傳統C/C+ +應用的開發更高效快捷,程式設計師可以把主要精力放在具體業務邏輯,而不是放在保障物理硬體的相容性上。通常情況下,一個程式設計師只要瞭解了必要的Java類庫API、Java語法, 學習適當的第三方開發框架,就已經基本滿足日常開發的需要了。虛擬機器會在使用者不知不覺中完成對硬體平臺的相容及對記憶體等資源的管理工作。因此,瞭解虛擬機器的運作並不是普通開發人員必備的,或者說首要學習的知識。

其實,目前商用的高效能Java虛擬機器都提供了相當多的優化引數和調節手段,用於滿足應用程式在實際生產環境中對效能和穩定性的要求。如果只是為了入門學習,讓程式在自己的機器上正常工作,那麼這些特性可以說是可有可無的;但是,如果用於生產開發,尤其是大規模的、企業級的生產開發,就迫切需要開發人員中至少有一部分 人對虛擬機器的特性及調節方法具有很清晰的認識。所以在Java開發體系中,對架構師、系統調優師、高階程式設計師等角色的需求一直都非常大。

學習虛擬機器中各種自動運作特性的原理也成為Java程式設計師成長路上最終必然會接觸到的一課。
通過本文,讀者可以以一個相對輕鬆的方式學到虛擬機器的運作原理。

首先先來看目錄

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

其次,是主要講的內容

本文一共分為五個部分:走近Java、自動記憶體管理、虛擬機器執行子系統、程式編譯與程式碼優化、高效併發。

各個部分之間基本上是互相獨立的,沒有必然的前後依賴關係,讀者可以從任何一一個感興趣的專題開始閱讀,但是每個部分各個章節間則有先後順序。

第一部分走近Java

本書的第一部分為後文的研究和講解建立了良好的基礎。雖然瞭解Java技術的來龍去脈,以及編譯自己的OpenJDK對於讀者理解Java虛擬機器並不是必須的,但是這些準備過程可以為走近Java技術和Java虛擬機器提供良好的引導。第一部分只有第1章:

第1章介紹了Java技術體系過去、現在的情況以及未來的發展趨勢,並在實踐中介紹瞭如何自己編譯一個OpenJDK 12。

第3版更新:續寫了Java技術發展史,這幾年Java世界著實 發生了很多值得記錄的大事件;完全重寫了第2版對未來Java的展望預測,當時暢想的Java新發展新變化全部如約而至,是時候把聚光燈交給下一個十年的Java了; OpenJDK開發、編譯也發生過不小的變動,本次更新將OpenJDK編譯的版本提升到12。

 

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第二部分自動記憶體管理

因為程式設計師把控制記憶體的權力交給了Java虛擬機器,所以可以在編碼的時候享受自動記憶體管理的諸多優勢,不過也正因為這個原因,一-旦 出現記憶體洩漏和溢位方面的問題,如果不瞭解虛擬機器是怎樣使用記憶體的,那排查錯誤將會成為一項異常艱難的工作。第二部分包括第2 ~ 5章:

第2章介紹了虛擬機器中記憶體是如何劃分的,哪部分割槽域、什麼樣的程式碼和操作可能導致記憶體溢位異常,並講解了各個區域出現記憶體溢位異常的常見原因。

第3版更新: Java執行期資料區域是虛擬機器的 基礎結構,儘管]DK版本在快速發展,這塊內容仍然保持了相對的穩定,主要的變化是JDK 8時期的永久代的落幕和元空間的登場;除此以外,本章著重修正了第2版中對]ava虛擬機器棧描述的含糊與偏差之處,還更新了部分測試程式碼,避免因JDK版本更迭導致與書中不一樣的結果。

 

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第3章介紹了垃圾收集的演算法和HotSpot虛擬機器中提供的幾款垃圾收集器的特點及運作原理。通過程式碼例項驗證了Java虛擬機器中自動記憶體分配及回收的主要規則。

第3版更新:由於撰寫第2版時JDK 7剛剛釋出,G1收集器尚無實踐資料可查,書中對此講述得比較含糊,本次更新完全重寫了這部分內容,並重點增加了JDK11、12中新出現的ZGC和Shenandoah兩款低延遲全併發收集器的詳細原理解析,這是垃圾收集器未來的發展方向。對其他與收集器相關的更新,如統一收集器介面、Epsilon等 也都做了對應介紹。此外,針對HotSpot中收集器實現的幾個關鍵技術點,如解決跨代引用的記憶集與卡表、解決併發標記的增量更新和原始快照演算法,還有記憶體讀、寫屏障等技術都增加了專門的小節來進行介紹,以便幫讀者在後續深入閱讀HotSpot設計與原始碼時打下良好的理論基礎。

 

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第4章介紹了隨JDK釋出的基礎命令列工具與視覺化的故障處理工具的使用方法。

第3版更新: Java虛 擬機的各種監控、管理等輔助工具的功能日益強大,幾乎每個版本在這些工具的數量、功能上都會或多或少有所變化,除了將第2版涉及的工具的變化依照JDK版本進行升級外,本章還新增了對JDK 9中加入的JHSDB的使用講解,並增加了對JFR和]MC的工作原理和使用方法的介紹,以及對部分JDK外部的工具(如]IT Watch)的簡要介紹。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第5章分享了 幾個比較有代表性的實際案例,還準備了一個所有開發人員都能“親身實戰”的練習,希望讀者能通過實踐來獲得故障處理和調優的經驗。

第3版更新:對案例部分進行了更新和增補,著重補充了與前3章新增內容相對應的問題處理案例。不過對實戰部分,軟體版本的落後並未影響筆者要表達的內容,原有的實戰目前仍具有相同的實戰價值,在第3版裡筆者也並未刻意將Eclipse和HotSpot升級後重寫一次。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第三部分虛擬機器執行子系統

執行子系統是虛擬機器中必不可少的組成部分,瞭解了虛擬機器如何執行程式,才能更好地理解怎樣才能寫出優秀的程式碼。第三部分包括第6~ 9章:

第6章講解了Class檔案結構中的各個組成部分,以及每個部分的定義、資料結構和使用方法,以實戰的方式演示了Class的資料是如何儲存和訪問的。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第7章介紹了類載入過程的"載入”"驗證” "準備” "解析” 和"初始化"五個階段中虛擬機器分別進行了哪些動作,還介紹了類載入器的工作原理及其對虛擬機器的意義。

第3版更新: 隨著Class檔案格 式的發展,類載入的各個過程都發生了一些細節性變動,本章將會按照JDK 12版本的《Java虛 擬機規範》的標準來同步更新這些內容。此外,在]DK9時引入了Java模組化系統,這是近年來]ava技術的一次重要升級,也是對類載入部分影響巨大的一項變革,在本章將加入專門的小節對其進行講述。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第8章分析了虛擬機器在執行程式碼時,如何找到正確的方法、如何執行方法內的位元組碼,以及執行程式碼時涉及的記憶體結構。

第3版更新:本章講述的是]ava虛擬機器執行子系統的概念模型,這部分屬於相對穩定的內容,變化不大,本次主要更新了Java虛擬機器對動態型別語言支援的增強。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第9章通過幾個類載入及 執行子系統的案例,介紹了使用類載入器和處理位元組碼的一-些值得欣賞和借鑑的思路,並通過一個實戰練習加深讀者對前面理論知識的理解。

第3版更新: 原有章節所涉及的案例中,程式、類庫、工具的版本已經較為陳舊,本次更新對這些案例涉及的版本進行了升級,以反映在模組化、Lambda表示式、動態語言等新技術出現後它們的相應變化。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第四部分程式編譯 與程式碼優化

Java程式從原始碼編譯成位元組碼,再從位元組碼編譯成本地機器碼的這兩個過程,從整體來看其實等同於一個傳統編譯器所執行的編譯前端、後端過程。第四部分包括第10~ 11章:

第10章分析了Java語言中泛型、主動裝箱拆箱、條件編譯等多種語法糖的前因後果,並實戰練習瞭如何使用插入式註解處理器來完成一個檢查程式命名規範的編譯器外掛。

第3版更新: 對第2版介紹泛型的小節進行了全文重寫,描述了不同語言裡泛型實現的方式、Java泛型出現的歷史背景和使用型別擦除來實現泛型所帶來的一些限制,並介紹了未來可能會在]ava中出現的值型別等內容。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第11章講解了虛擬機器的熱點探測方法、HotSpot的即時編譯器、 編譯觸發條件,以及如何從虛擬機器外部觀察和分析即時編譯的資料和結果,還選擇了幾種常見的編譯期優化技術進行講解。

第3版更新: 專門增加了介紹提前編譯 器的章節;由於HotSpot 中新的Gral編譯器的加入,書中除了同步增加Graal編譯器、JVMCI介面等內容,為了使讀者可以在HotSpot編譯器上進行實戰練習,在本書第3版中還新增了許多編譯器的實戰內容。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第五部分高效併發

Java語言和虛擬機器提供了原生的、完善的多執行緒支援,使得它天生就適合開發多執行緒併發的應用程式。不過我們不能期望系統來完成所有與併發相關的處理,瞭解併發的內幕也是成為一-位高階程式設計師不可缺少的課程。第五部分包括第12~ 13章:

第12章講解了虛擬機器Java記憶體模型的結構及操作,以及原子性、可見性和有序性在Java記憶體模型中的體現;介紹了先行發生原則的規則及使用,以及執行緒在Java語言之中是如何實現的;還提前介紹了目前仍然在實驗室狀態的Java協程的相關內容。

第3版更新:重寫了原有的對]ava記憶體模型部分過時和過於晦澀的描述,增加了面向]ava未來基於協程的新併發模型的介紹。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

第13章介紹 了執行緒安全所涉及的概念和分類、同步實現的方式及虛擬機器的底層運作原理,並且介紹了虛擬機器實現高效併發所做的一系列鎖優化措施。

第3版更新:本章主體內容並沒有過多變化,但對不少細節進行了修飾,對一些讀者疑問較多的地方進行了補充講解。

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

最後,給大家分享本文的參考Java虛擬機器資料

本文名為"深入理解Java虛擬機器” ,但要想真的深入理解虛擬機器,僅憑本文肯定是遠遠不夠的,讀者可以通過以下方式查詢到更多關於Java虛擬機器方面的資料。筆者在寫作此文的時候,也從下面這些參考資料中得到過很大的幫助。

1.《Java虛擬機器規範》

要學習虛擬機器,《Java虛擬機器規範》 無論如何都是必須讀的。這本書的概念和細節描述與Sun的早期虛擬機器(Sun Classic虛擬機器)高度吻合,隨著技術的發展,高效能虛擬機器真正的細節實現方式已經漸漸與虛擬機器規範所描述的方式差距越來越大,如果只能選擇一本參考 書來了解Java虛擬機器,那必然是這本書。

第1章 引言
1.1 簡史
1.2 Java虛擬機器
1.3 各章節摘要
1.4 說明
1.5 反饋
第2章 Java虛擬機器結構
2.1 class檔案格式
2.2 資料型別
2.3 原始型別與值
2.3.1 整數型別與整型值
2.3.2 浮點型別、取值集合及浮點值
2.3.3 returnAddress型別和值
2.3.4 boolean型別
2.4 引用型別與值
2.5 執行時資料區
2.5.1 pc暫存器
2.5.2 Java虛擬機器棧
2.5.3 Java堆
2.5.4 方法區
2.5.5 執行時常量池
2.5.6 本地方法棧
2.6 棧幀
2.6.1 區域性變數表
2.6.2 運算元棧
2.6.3 動態連結
2.6.4 方法呼叫正常完成
2.6.5 方法呼叫異常完成
2.7 物件的表示
2.8 浮點演算法
2.8.1 Java虛擬機器和IEEE,754中的浮點演算法
2.8.2 浮點模式
2.8.3 數值集合轉換
2.9 特殊方法
2.10 異常
2.11 位元組碼指令集簡介
2.11.1 資料型別與Java虛擬機器
2.11.2 載入和儲存指令
2.11.3 算術指令
2.11.4 型別轉換指令
……
第3章 Java虛擬機器編譯器
第4章 class檔案格式
第5章 載入、連結與初始化
第6章 Java虛擬機器指令集
第7章 操作碼助記符
附錄A Limited License Grant

2.《]ava語言規範》

雖然Java虛擬機器並不是Java語言專有的,但是瞭解Java語言的各種細節規定對虛擬機器的行為也是很有幫助的,它與《Java虛擬機器規範》一樣都是Oracle官方直接出版的書籍,而且這本書還是由Java之父James Gosling親自執筆撰寫。

第1章 概述 1
第2章 文法 6
第3章 詞法結構 9
第4章 型別、值和變數 25
第5章 型別轉換與上下文 59
第6章 名字 84
第7章 包 113
第8章 類 123
第9章 介面 184
......

3.《垃圾回收演算法手冊:自動記憶體管理的藝術

2016年3月由機械工業出版社引進翻譯,這是一本真正的教科書式的學術著作,是垃圾收集技術領域中的唯一必讀的書籍。 該書從硬體與軟體的發展給垃圾回收所帶來的新挑戰出發,探討了這些挑戰給高效能垃圾回收器的設計者與實現者所帶來的影響,涵蓋了並行垃圾回收、增量式垃圾回收、併發垃圾回收以及實時垃圾回收,描述各種演算法與概念。唯一缺點是由於過於專業, 所以顯得比較晦澀,不適合作為入門書籍使用。

第1章 引言1
第2章 標記–清掃回收 15
第3章 標記–整理回收 28
第4章 複製式回收 38
第5章 引用計數 49
第6章 垃圾回收器的比較 64
第7章 記憶體分配 72
第8章 堆記憶體的劃分 87
第9章 分代垃圾回收 95
第10章 其他分割槽策略 117
第11章 執行時介面 138
第12章 特定語言相關內容 188
第13章 併發演算法預備知識 202
第14章 並行垃圾回收 242
第15章 併發垃圾回收 271
第16章 併發標記–清掃演算法 285
第17章 併發複製、併發整理演算法 298
第18章 併發引用計數演算法 322
第19章 實時垃圾回收 333

4.《]ava效能優化權威指南》

此書是"The Java"系列(該系列中最出名的《Effective Java》許多人都讀過)圖書中最新的一本,但也有一定的歷史了。 2011年10月出版,2014年3月由人民郵電出版社引進翻譯。這本書並非全部都圍繞Java虛擬機器展開(只有第3、4、7章直接與Java虛擬機器相關),而是從作業系統到基於Java的上層程式效能度量和調優進行全面介紹。其中涉及Java虛擬機器的內容具備一定深度和很好的可實踐性。

第1章 策略、方法和方法論    
第2章 作業系統效能監控   
第3章 JVM概覽    
第4章 JVM效能監控    
第5章 Java應用效能分析    
第6章 Java應用效能分析技巧  
第7章 JVM效能調優入門  
第8章 Java應用的基準測試   
第9章 多層應用的基準測試   
第10章 Web應用的效能調優  
第11章 Web Service的效能   
第12章 Java持久化及Enterprise Java Bean的效能  

總結

為了讓大家更加深入理解Java虛擬機器,小編特意把Java虛擬機器方面的資料都給整理出來了,希望能幫助到大家的學習!!

膜拜!阿里內部學習的五大深入理解Java虛擬機器PDF,真的強

 

需要入職阿里必備的這五大部分深入理解Java虛擬機器資料的朋友,可以轉發關注小編,直接檢視下方圖片,掃碼新增或私信小編【技術】來獲取!!!

大家好好學習吧!!

相關文章