豆瓣评分
内容简介 · · · · · ·
對Java程式師來說,Java虛擬機器是既熟悉又神秘,很少能夠抑制自己探究它的衝動,分析JVM的書籍更是少之又少。
本書化繁為簡帶領讀者在輕鬆中領略Java虛擬機器的奧秘。同時從核心理論和實際運用的角度去探討Java虛擬機器,並對JVM進行全面而深入的分析。不僅理論分析透徹,而且書中包含大量經典案例與實務應用。
作者將多年來在Java虛擬機器領域的實務經驗和研究心得呈現在本書中,不僅有系統地講解Java虛擬機器工作機制和底層原理,更難能可貴的是與實作結合,可作為學習虛擬機器的精選教材
直達Java虛擬機器的创作者
· · · · · ·
-
周志明 作者
作者简介 · · · · · ·
周志明,资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。尤其精通Java虚拟机,撰写了大量与JVM相关的经典文章,被各大技术社区争相转载,是ITeye等技术社区公认的Java虚拟机方面的领袖人物之一。除本书外,还著有经典著作《深入理解OSGi:Equinox原理、应用与最佳实践》,广获读者好评。现任远光软件股份有限公司开发部总经理兼架构师,先后参与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作,对软件系统架构也有深刻的认识和体会。
目录 · · · · · ·
第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 歷史版本軌
· · · · · · (收起)
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 歷史版本軌
· · · · · · (收起)
直達Java虛擬機器的书评 · · · · · · ( 全部 80 条 )
JVM从入门到放弃?不要这么轻易就放弃啊
每一个JVM编程语言开发工程师,不管Java还是Groovy,Scala,Clojure,乃至新兴的Kotlin语言,在好奇心和求知欲驱使下,不断深度学习本领域的新东西时一定会接触到JVM。可能从基友,公众号,网络或书籍上了解到,然后走上了从从入门到放弃之路。但是出来工作以后,JVM这一关,终...
(展开)
Java虚拟机一本通
正在二刷这本书,写的真是太精彩了,就Java虚拟机方面的书,特意逛了一下美亚,我发现:即使是英语世界--计算机科学的大本营,也找不到一本能和周老师这本书相媲美的书,建议周老师把它译成英文版,造福全世界的程序员。 从我本人的经历来说,应该是Java领域的老兵了。我大学毕...
(展开)
深入理解Java虚拟机:JVM高级特性与最佳实践 读后感
写这篇读后感的缘由是这本书的第三版即将面世了,先拜谢周教授,相信很多人得益于周教授的这本书。 14年入手的第二版,当时准备跳槽,需要理论知识武装一下。于是囫囵吞枣的扫了第一遍,就两个字,不懂,那种感觉就仿佛身在雾中,一切都看不通透,感觉浑身不舒服,想来是自己水...
(展开)
Java虚拟机,有这本就够了
之前看过第二版,对于想了解jvm的小伙伴建议入手这本书。 类加载、内存分析、垃圾收集机制等部分都是进入jvm大门的必备知识,如果想更深入了解,还有字节码层面的介绍,还结合了一些案例进行讲解。 而第三版是在jdk12的基础上进行介绍的,想了解当前jvm的最新进展的小伙伴,本...
(展开)
> 更多书评 80篇
这本书的其他版本 · · · · · · ( 全部4 )
-
机械工业出版社 (2013)9.1分 1964人读过
-
机械工业出版社 (2019)9.4分 799人读过
-
机械工业出版社 (2011)8.6分 915人读过
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有8人想读,手里有一本闲着?
订阅关于直達Java虛擬機器的评论:
feed: rss 2.0
0 有用 RexLi 2015-06-03 12:47:47
有點艱深
0 有用 RexLi 2015-06-03 12:47:47
有點艱深