1. 程式人生 > >深入理解Java虛擬機器:JVM高階特性與最佳實踐pdf

深入理解Java虛擬機器:JVM高階特性與最佳實踐pdf

下載地址:網盤下載

目錄:前言第一部分 走近Java第1章 走近Java1.1 概述1.2 Java技術體系1.3 Java發展史1.4 Java虛擬機發展史1.4.1 Sun Classic Exact VM1.4.2 Sun HotSpot VM1.4.3 Sun Mobile-Embedded VM Meta-Circular VM1.4.4 BEA JRockit IBM J9 VM1.4.5 Azul VM BEA Liquid VM1.4.6 Apache Harmony Google Android Dalvik VM1.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 實戰:自己編譯JDK1.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歷史版本軌跡下載地址:
網盤下載