深刻理解Java虛擬機:JVM高級特性與最佳實踐pdf

下載地址:網盤下載算法

 

 

 

目錄:
前言
第一部分 走近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歷史版本軌跡

 

 

下載地址: 網盤下載
相關文章
相關標籤/搜索