《直達Java虛擬機器》是2013年3月佳魁資訊股份有限公司出版的圖書,作者是周志明。
基本介紹
- 中文名:直達Java虛擬機器
- 作者:周志明
- 出版時間:2013年3月
- 出版社:佳魁資訊股份有限公司
- ISBN:9789865836061
內容簡介,圖書目錄,
內容簡介
對Java程式師來說,Java虛擬機器是既熟悉又神秘,很少能夠抑制自己探究它的衝動,分析JVM的書籍更是少之又少。
本書化繁為簡帶領讀者在輕鬆中領略Java虛擬機器的奧秘。同時從核心理論和實際運用的角度去探討Java虛擬機器,並對JVM進行全面而深入的分析。不僅理論分析透徹,而且書中包含大量經典案例與實務應用。
作者將多年來在Java虛擬機器領域的實務經驗和研究心得呈現在本書中,不僅有系統地講解Java虛擬機器工作機制和底層原理,更難能可貴的是與實作結合,可作為學習虛擬機器的精選教材
圖書目錄
第1章 走近 Java
1.1 概述
1.2 Java 技術體系
1.3 Java 發展史
1.4 展望 Java 技術的未來
1.4.1 模組化
1.4.2 混合語言
1.4.3 多核心平行
1.4.4 進一步豐富語法
1.4.5 64 位元虛擬機器
1.5 實戰 :自己編譯 JDK
1.5.1 獲取 JDK 原始碼
1.5.2 系統需求
1.5.3 構建編譯環境
1.5.4 準備依賴項
1.5.5 進行編譯
1.6 本章小結
第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 對象訪問
2.4 實戰:OutOfMemoryError異常
2.4.1 Java 堆溢出
2.4.2 虛擬機器堆疊和本地方法堆疊溢出 .
2.4.3 執行時常數池溢出
2.4.4 方法區溢出
2.4.5 本機直接記憶體溢出
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 垃圾收集器
3.4.1 Serial 收集器
3.4.2 ParNew 收集器
3.4.3 Parallel Scavenge 收集器
3.4.4 Serial Old 收集器
3.4.5 Parallel Old 收集器
3.4.6 CMS 收集器
3.4.7 G1 收集器
3.4.8 垃圾收集器參數總結
3.5 記憶體分配與回收策略
3.5.1 對象優先在 Eden 分配
3.5.2 大物件直接進入老年代
3.5.3 長期存活的物件將進入老年代
3.5.4 動態物件年齡判定
3.5.5 空間分配擔保
3.6 本章小結
第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.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.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 Class檔結構的發展
6.5 本章小結
第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.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與C/C++的編譯器對比
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 Java虛擬機器家族
A.1 商用高性能虛擬機器
A.2 其他影響較大的虛擬機器
A.3 嵌入式虛擬機器
A.4 其他虛擬機器實現
附錄B 虛擬機器位元組編碼指令表
附錄C HotSpot虛擬機器主要參數表
C.1 記憶體管理參數
C.2 即時編譯參數
C.3 類型載入參數
C.4 多執行緒相關參數
C.5 性能參數
C.6 偵錯參數
附錄D 物件查詢語言(OQL)簡介
D.1 SELECT子句
D.1.1 選擇特定的顯示列
D.1.2 使用列別名
D.1.3 合併成為一個物件清單選擇專案
D.1.4 排除重複物件
D.2 FROM子句
D.2.1 FROM子句指定需要查詢的類別
D.2.2 包含子類別
D.2.3 禁止查詢類別實例
D.3 WHERE子句
D.3.1 >=、<=、>、<、[NOT] LIKE、[NOT] IN(關係操作)
D.3.2 =、!=(等於操作)
D.3.3 AND(條件與操作)
D.3.4 OR(條件或操作)
D.3.5 文字運算式
D.4 屬性訪問器
D.4.1 訪問堆轉儲快照中對象的欄位
D.4.2 訪問Java Bean屬性
D.4.3 呼叫OQL Java方法
D.4.4 OQL 的內建函數
D.5 OQL 語言的 BNF 範式
附錄E JDK 歷史版本軌