1. 程式人生 > 其它 >深入理解Java虛擬機器第二版 高清PDF分享

深入理解Java虛擬機器第二版 高清PDF分享

獲取方式: https://pan.baidu.com/s/1ADYS7pjefl3gA4zWX3hUSA 提取碼: jj6z

 本書第1版兩年內印刷近10次,4家網上書店的評論近4?000條,98%以上的評論全部為5星級的好評,是整個Java圖書領域公認的經典著作和超級暢銷書,繁體版在臺灣也十分受歡迎。第2版在第1版的基礎上做了很的改進:根據全新的JDK 1.7對全書內容進行了全面的升級和補充;增加了量處理各種常見JVM問題的技巧和優佳實踐;增加了若干與生產環境相結合的實戰案例;對第1版中的錯誤和不足之處的修正;等等。第2版不僅技術更新、內容更豐富,而且實戰性更強。
  本書共分為五部分,圍繞記憶體管理、執行子系統、程式編譯與優化、高效併發等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分從巨集觀的角度介紹了整個Java技術體系、Java和JVM的發展歷程、模組化,以及JDK的編譯,這對理解本書後面內容有重要幫助。第二部分講解了JVM的自動記憶體管理,包括虛擬機器記憶體區域的劃分原理以及各種記憶體溢位異常產生的原因;常見的垃圾收集演算法以及垃圾收集器的特點和工作原理;常見虛擬機器監控與故障處理工具的原理和使用方法。第三部分分析了虛擬機器的執行子系統,包括類檔案結構、虛擬機器類載入機制、虛擬機器位元組碼執行引擎。第四部分講解了程式的編譯與程式碼的優化,闡述了泛型、自動裝箱拆箱、條件編譯等語法糖的原理;講解了虛擬機器的熱點探測方法、HotSpot的即時編譯器、編譯觸發條件,以及如何從虛擬機器外部觀察和分析JIT編譯的資料和結果;第五部分探討了Java實現高效併發的原理,包括JVM記憶體模型的結構和操作;原子性、可見性和有序性在Java記憶體模型中的體現;先行發生原則的規則和使用;執行緒在Java語言中的實現原理;虛擬機器實現高效併發所做的一系列鎖優化措施。

前言
第一部分 走近Java
第1章 走近Java
1.1 概述
1.2 Java技術體系
1.3 Java發展史
1.4 Java虛擬機發展史
1.4.1 Sun Classic Exact VM
1.4.2 Sun HotSpot VM
1.4.3 Sun Mobile-Embedded VM Meta-Circular VM
1.4.4 BEA JRockit IBM J9 VM
1.4.5 Azul VM BEA Liquid VM
1.4.6 Apache Harmony Google Android Dalvik VM
1.4.7 Microsoft JVM及其他
1.5 展望Java技術的未來
1.5.1 模組化
1.5.2 混合語言
1.5.3 多核並行
1.5.4 進一步豐富語法
1.5.5 64位虛擬機器
1.6 實戰:自己編譯JDK
1.6.1 獲取JDK原始碼
1.6.2 系統需求
1.6.3 構建編譯環境
1.6.4 進行編譯
1.6.5 在IDE工具中進行原始碼除錯
1.7 本章小結
第二部分 自動記憶體管理機制
第2章 Java記憶體區域與記憶體溢位異常
2.1 概述
2.2 執行時資料區域
2.2.1 程式計數器
2.2.2 Java虛擬機器棧
2.2.3 本地方法棧
2.2.4 Java堆
2.2.5 方法區
2.2.6 執行時常量池
2.2.7 直接記憶體
2.3 HotSpot虛擬機器物件探祕
2.3.1 物件的建立
2.3.2 物件的記憶體佈局
2.3.3 物件的訪問定位
2.4 實戰:OutOfMemoryError異常
2.4.1 Java堆溢位
2.4.2 虛擬機器棧和本地方法棧溢位
2.4.3 方法區和執行時常量池溢位
2.4.4 本機直接記憶體溢位
2.5 本章小結
第3章 垃圾收集器與記憶體分配策略
3.1 概述
3.2 物件已死
3.2.1 引用計數演算法
3.2.2 可達性分析演算法
3.2.3 再談引用
3.2.4 生存還是死亡
3.2.5 回收方法區
3.3 垃圾收集演算法
3.3.1 標記-清除演算法
3.3.2 複製演算法
3.3.3 標記-整理演算法
3.3.4 分代收集演算法
3.4 HotSpot的演算法實現
3.4.1 列舉根節點
3.4.2 安全點
3.4.3 安全區域
3.5 垃圾收集器
3.5.1 Serial收集器
3.5.2 ParNew收集器
3.5.3 Parallel Scavenge收集器
3.5.4 Serial Old收集器
3.5.5 Parallel Old收集器
3.5.6 CMS收集器
3.5.7 G1收集器
3.5.8 理解GC日誌
3.5.9 垃圾收集器引數總結
3.6 記憶體分配與回收策略
3.6.1 物件優先在Eden分配
3.6.2 物件直接進入老年代
3.6.3 長期存活的物件將進入老年代
3.6.4 動態物件年齡判定
3.6.5 空間分配擔保
3.7 本章小結
第4章 虛擬機器效能監控與故障處理工具
4.1 概述
4.2 JDK的命令列工具
4.2.1 jps:虛擬機器程序狀況工具
4.2.2 jstat:虛擬機器統計資訊監視工具
4.2.3 jinfo:Java配置資訊工具
4.2.4 jmap:Java記憶體映像工具
4.2.5 jhat:虛擬機器堆轉儲快照分析工具
4.2.6 jstack:Java堆疊跟蹤工具
4.2.7 HSDIS:JIT生成程式碼反彙編
4.3 JDK的視覺化工具
4.3.1 JConsole:Java監視與管理控制檯
4.3.2 VisualVM:多合一故障處理工具
4.4 本章小結
第5章 調優案例分析與實戰
5.1 概述
5.2 案例分析
5.2.1 高效能硬體上的程式部署策略
5.2.2 叢集間同步導致的記憶體溢位
5.2.3 堆外記憶體導致的溢位錯誤
5.2.4 外部命令導致系統緩慢
5.2.5 伺服器JVM程序崩潰
5.2.6 不恰當資料結構導致記憶體佔用過
5.2.7 由Windows虛擬記憶體導致的長時間停頓
5.3 實戰:Eclipse執行速度調優
5.3.1 調優前的程式執行狀態
5.3.2 升級JDK 1.6的效能變化及相容問題
5.3.3 編譯時間和類載入時間的優化
5.3.4 調整記憶體設定控制垃圾收集頻率
5.3.5 選擇收集器降低延遲
5.4 本章小結
第三部分 虛擬機器執行子系統
第6章 類檔案結構
6.1 概述
6.2 無關性的基石
6.3 Class類檔案的結構
6.3.1 魔數與Class檔案的版本
6.3.2 常量池
6.3.3 訪問標誌
6.3.4 類索引、父類索引與介面索引集合
6.3.5 欄位表集合
6.3.6 方法表集合
6.3.7 屬性表集合
6.4 位元組碼指令簡介
6.4.1 位元組碼與資料型別
6.4.2 載入和儲存指令
6.4.3 運算指令
6.4.4 型別轉換指令
6.4.5 物件建立與訪問指令
6.4.6 運算元棧管理指令
6.4.7 控制轉移指令
6.4.8 方法呼叫和返回指令
6.4.9 異常處理指令
6.4.10 同步指令
6.5 公有設計和私有實現
6.6 Class檔案結構的發展
6.7 本章小結
第7章 虛擬機器類載入機制
7.1 概述
7.2 類載入的時機
7.3 類載入的過程
7.3.1 載入
7.3.2 驗證
7.3.3 準備
7.3.4 解析
7.3.5 初始化
7.4 類載入器
7.4.1 類與類載入器
7.4.2 雙親委派模型
7.4.3 破壞雙親委派模型
7.5 本章小結
第8章 虛擬機器位元組碼執行引擎
8.1 概述
8.2 執行時棧幀結構
8.2.1 區域性變量表
8.2.2 運算元棧
8.2.3 動態連線
8.2.4 方法返回地址
8.2.5 附加資訊
8.3 方法呼叫
8.3.1 解析
8.3.2 分派
8.3.3 動態型別語言支援
8.4 基於棧的位元組碼解釋執行引擎
8.4.1 解釋執行
8.4.2 基於棧的指令集與基於暫存器的指令集
8.4.3 基於棧的直譯器執行過程
8.5 本章小結
第9章 類載入及執行子系統的案例與實戰
9.1 概述
9.2 案例分析
9.2.1 Tomcat:正統的類載入器架構
9.2.2 OSGi:靈活的類載入器架構
9.2.3 位元組碼生成技術與動態代理的實現
9.2.4 Retrotranslator:跨越JDK版本
9.3 實戰:自己動手實現遠端執行功能
9.3.1 目標
9.3.2 思路
9.3.3 實現
9.3.4 驗證
9.4 本章小結
第四部分 程式編譯與程式碼優化
第10章 早期(編譯期)優化
10.1 概述
10.2 Javac編譯器
10.2.1 Javac的原始碼與除錯
10.2.2 解析與填充符號表
10.2.3 註解處理器
10.2.4 語義分析與位元組碼生成
10.3 Java語法糖的味道
10.3.1 泛型與型別擦除
10.3.2 自動裝箱、拆箱與遍歷迴圈
10.3.3 條件編譯
10.4 實戰:插入式註解處理器
10.4.1 實戰目標
10.4.2 程式碼實現
10.4.3 執行與測試
10.4.4 其他應用案例
10.5 本章小結
第11章 晚期(執行期)優化
11.1 概述
11.2 HotSpot虛擬機器內的即時編譯器
11.2.1 直譯器與編譯器
11.2.2 編譯物件與觸發條件
11.2.3 編譯過程
11.2.4 檢視及分析即時編譯結果
11.3 編譯優化技術
11.3.1 優化技術概覽
11.3.2 公共子表示式消除
11.3.3 陣列邊界檢查消除
11.3.4 方法內聯
11.3.5 逃逸分析
11.4 Java與CC++的編譯器對比
11.5 本章小結
第五部分 高效併發
第12章 Java記憶體模型與執行緒
12.1 概述
12.2 硬體的效率與一致性
12.3 Java記憶體模型
12.3.1 主記憶體與工作記憶體
12.3.2 記憶體間互動操作
12.3.3 對於volatile型變數的特殊規則
12.3.4 對於long和double型變數的特殊規則
12.3.5 原子性、可見性與有序性
12.3.6 先行發生原則
12.4 Java與執行緒
12.4.1 執行緒的實現
12.4.2 Java執行緒排程
12.4.3 狀態轉換
12.5 本章小結
第13章 執行緒安全與鎖優化
13.1 概述
13.2 執行緒安全
13.2.1 Java語言中的執行緒安全
13.2.2 執行緒安全的實現方法
13.3 鎖優化
13.3.1 自旋鎖與自適應自旋
13.3.2 鎖消除
13.3.3 鎖粗化
13.3.4 輕量級鎖
13.3.5 偏向鎖
13.4 本章小結
附  錄
附錄A 編譯Windows版的OpenJDK
附錄B 虛擬機器位元組碼指令表
附錄C HotSpot虛擬機器主要引數表
附錄D 物件查詢語言(OQL)簡介
附錄E JDK歷史版本軌跡