使用JAVA語言最引人矚目的原因之一是,它能夠提高開發(fā)者的效率;而他最主要的缺點在于執(zhí)行速度較慢。 面向?qū)ο蠹夹g(shù)的承諾之一是提升代碼的重用率,提高開發(fā)者的效率。深入java虛擬機相當(dāng)不錯,對于了解JVM運行機制很有幫助。能把如此復(fù)雜的事情寫的這么簡單,足可見作者的技術(shù)功底。 進(jìn)行JAVA開發(fā)的技術(shù)人員都應(yīng)該讀一讀這本書,從而真正了解JAVA的運行機制,并提高對系統(tǒng)和平臺的控制能力。
1、最有價值章節(jié):5,7,8,9,20,值得反復(fù)精讀。 2、更深一步的話,3,6,17,18是值得閱讀的 3、余下關(guān)于指令的,若沒實操項目,不必精讀。 總的說來,這本書清晰平易的給出了JVM的藍(lán)圖。 對JVM的內(nèi)部機理有著深入細(xì)致本質(zhì)的描述。
目錄:
譯者序
前言
第1章 java體系結(jié)構(gòu)介紹
1.1 為什么使用java
1.2 網(wǎng)絡(luò)帶來的挑戰(zhàn)和機遇
1.3 體系結(jié)構(gòu)
1.3.1 java虛擬機
1.3.2 類裝載器的體系結(jié)構(gòu)
1.3.3 java class文件
1.3.4 java api
1.3.5 java程序設(shè)計語言
1.4 java體系結(jié)構(gòu)的代價
1.5 結(jié)論
1.6 資源頁
第2章 平臺無關(guān)
2.1 為什么要平臺無關(guān)
2.2 java的體系結(jié)構(gòu)對平臺無關(guān)的支持
2.2.1 java平臺
2.2.2 java語言
2.3.3 java class文件
. 2.2.4 可伸縮性
2.3 影響平臺無關(guān)性的因素
2.3.1 java平臺的部署
2.3.2 java平臺的版本
2.3.3 本地方法
2.3.4 非標(biāo)準(zhǔn)運行時庫
2.3.5 對虛擬機的依賴
2.3.6 對用戶界面的依賴
2.3.7 java平臺實現(xiàn)中的bug
2.3.8 測試
2.4 平臺無關(guān)的七個步驟
2.5 平臺無關(guān)性的策略
2.6 平臺無關(guān)性和網(wǎng)絡(luò)移動對象
2.7 資源頁
第3章 安全
3.1 為什么需要安全性
3.2 基本沙箱
3.3 類裝載器體系結(jié)構(gòu)
3.4 class文件檢驗器
3.4.1 第一趟:class文件的結(jié)構(gòu)檢查
3.4.2 第二趟:類型數(shù)據(jù)的語義檢查
3.4.3 第三趟:字節(jié)碼驗證
3.4.4 第四趟:符號引用的驗證
3.4.5 二進(jìn)制兼容
3.5 java虛擬機中內(nèi)置的安全特性
3.6 安全管理器和java api
3.7 代碼簽名和認(rèn)證
3.8 一個代碼簽名示例
3.9 策略
3.10 保護域
3.11 訪問控制器
3.11.1 implies()方法
3.11.2 棧檢查示例
3.11.3 一個回答“是”的棧檢查
3.11.4 一個回答“不”的棧檢查
3.11.5 doprivileged()方法
3.11.6 doprivileged()的一個無效使用
3.12 java安全模型的不足和今后的發(fā)展
方向
3.13 和體系結(jié)構(gòu)無關(guān)的安全性
3.14 資源頁
第4章 網(wǎng)絡(luò)移動性
4.1 為什么需要網(wǎng)絡(luò)移動性
4.2 一種新的軟件模式
4.3 java體系結(jié)構(gòu)對網(wǎng)絡(luò)移動性的支持
4.4 applet:網(wǎng)絡(luò)移動性代碼的示例
4.5 jini服務(wù)對象:網(wǎng)絡(luò)移動對象的示例
4.5.1 jini是什么
4.5.2 jini如何工作
4.5.3 服務(wù)對象的優(yōu)點
4.6 網(wǎng)絡(luò)移動性:java設(shè)計的中心
4.7 資源頁
第5章 java虛擬機
5.1 java虛擬機是什么
5.2 java虛擬機的生命周期
5.3 java虛擬機的體系結(jié)構(gòu)
5.3.1 數(shù)據(jù)類型
5.3.2 字長的考量
5.3.3 類裝載器子系統(tǒng)
5.3.4 方法區(qū)
5.3.5 堆
5.3.6 程序計數(shù)器
5.3.7 java棧
5.3.8 棧幀
5.3.9 本地方法棧
5.3.10 執(zhí)行引擎
5.3.11 本地方法接口
5.4 真實機器
5.5 一個模擬:“eternal math”
5.6 隨書光盤
5.7 資源頁
第6章 java class文件
6.1 java class文件是什么
6.2 class文件的內(nèi)容
6.3 特殊字符串
6.3.1 全限定名
6.3.2 簡單名稱
6.3.3 描述符
6.4 常量池
6.4.1 constant_utf8_info表
6.4.2 constant_integer_info表
6.4.3 constant_float_info表
6.4.4 constant_long_info表
6.4.5 constant_double_info表
6.4.6 constant_class_info表
6.4.7 constant_string_info表
6.4.8 constant_fieldref_info表
6.4.9 constant_methodref_info表
6.4.10 constant_interfacemethodref_
info表
6.4.11 constant_nameandtype_info
表
6.5 字段
6.6 方法
6.7 屬性
6.7.1 屬性格式
6.7.2 code屬性
6.7.3 constantvalue屬性
6.7.4 deprecated屬性
6.7.5 exceptions屬性
6.7.6 innerclasses屬性
6.7.7 linenumbertable屬性
6.7.8 localvariabletable屬性
6.7.9 sourcefile屬性
6.7.10 synthetic屬性
6.8 一個模擬:“getting loaded”
6.9 隨書光盤
6.10 資源頁
第7章 類型的生命周期
7.1 類型裝載、連接與初始化
7.1.1 裝載
7.1.2 驗證
7.1.3 準(zhǔn)備
7.1.4 解析
7.1.5 初始化
7.2 對象的生命周期
7.2.1 類實例化
7.2.2 垃圾收集和對象的終結(jié)
7.3 卸載類型
7.4 隨書光盤
7.5 資源頁
第8章 連接模型
8.1 動態(tài)連接和解析
8.1.1 解析和動態(tài)擴展
8.1.2 類裝載器與雙親委派模型
8.1.3 常量池解析
8.1.4 解析constant_class_info入口
8.1.5 解析constant_fieldref_info
入口
s.1.6 解析constant_methodref_info
入口
8.1.7 解析constant_interface-
methodref_info入口
8.1.8 解析constant_string_info入口
8.1.9 解析其他類型的入口
8.1.10 裝載約束
8.1.11 編譯時常量解析
8.1.12 直接引用
8.1.13 _quick指令
8.1.14 示例:salutation程序的連接
8.1.15 示例:greet程序的動態(tài)擴展
8.1.16 使用1.1版本的用戶自定義類裝
載器
8.1.17 使用1.2版本的用戶自定義類裝
載器
8.1.18 示例:使用forname()的動態(tài)擴展
8.1.19 示例:卸載無法觸及的greeter類
8.1.20 示例:類型安全性與裝載約束
8.2 隨書光盤
8.3 資源頁
第9章 垃圾收集
9.1 為什么要使用垃圾收集
9.2 垃圾收集算法
9.3 引用計數(shù)收集器
9.4 跟蹤收集器
9.5 壓縮收集器
9.6 拷貝收集器
9.7 按代收集的收集器
9.8 自適應(yīng)收集器
9.9 火車算法
9.9.1 車廂、火車和火車站
9.9.2 車廂收集
9.9.3 記憶集合和流行對象
9.10 終結(jié)
9.11 對象可觸及性的生命周期
9.11.1 引用對象
9.11.2 可觸及性狀態(tài)的變化
9.11.3 緩存、規(guī)范映射和臨終清理
9.12 一個模擬:“heap of fish”
9.12.1 分配魚
9.12.2 設(shè)置引用
9.12.3 垃圾收集
9.12.4 壓縮堆
9.13 隨書光盤
9.14 資源頁
第10章 棧和局部變量操作
10.1 常量入棧操作
10.2 通用棧操作
10.3 把局部變量壓入棧
10.4 彈出棧頂部元素,將其賦給局部變量
10.5 wide指令
10.6 一個模擬:“fibonacci forever”
10.7 隨書光盤
10.8 資源頁
第11章 類型轉(zhuǎn)換
11.1 轉(zhuǎn)換操作碼
11.2 一個模擬:“conversion diversion”
11.3 隨書光盤
11.4 資源頁
第12章 整數(shù)運算
12.1 二進(jìn)制補碼運算
12.2 inner int:揭示java int類型內(nèi)部性質(zhì)
的applet
12.3 運算操作碼
12.4 一個模擬:“prime time”
12.5 隨書光盤
12.6 資源頁
第13章 邏輯運算
13.1 邏輯操作碼
13.2 一個模擬:“l(fā)ogical results”
13.3 隨書光盤
13.4 資源頁
第14章 浮點運算
14.1 浮點數(shù)
14.2 inner float:揭示java float類型內(nèi)部
性質(zhì)的applet
14.3 浮點模式
14.3.1 浮點值集合
14.3.2 浮點值集的轉(zhuǎn)換
14.3.3 相關(guān)規(guī)則的本質(zhì)
14.4 浮點操作碼
14.5 一個模擬:“circle of squares”
14.6 隨書光盤
14.7 資源頁
第15章 對象和數(shù)組
15.1 關(guān)于對象和數(shù)組的回顧
15.2 針對對象的操作碼
15.3 針對數(shù)組的操作碼
15.4 一個模擬:“three—dimensional
array”
15.5 隨書光盤
15.6 資源頁
第16章 控制流
16.1 條件分支
16.2 五條件分支
16.3 使用表的條件分支
16.4 一個模擬:“saying tomato”
16.5 隨書光盤
16.6 資源頁
第17章 異常
17.1 異常的拋出與捕獲
17.2 異常表
17.3 一個模擬:“play ball!”
17.4 隨書光盤
17.5 資源頁
第18章 finally子句
18.1 微型子例程
18.2 不對稱的調(diào)用和返回
18.3 一個模擬:“hop around”
18.4 隨書光盤
18.5 資源頁
第19章 方法的調(diào)用與返回
19.1 方法調(diào)用
19.1.1 java方法的調(diào)用
19.1.2 本地方法的調(diào)用
19.2 方法調(diào)用的其他形式
19.3 指令invokespecial
19.3.1 指令invokespecial和[init]()方法
19.3.2 指令invokespecial和私有方法
19.3.3 指令invokespecial和super關(guān)鍵字
19.4 指令invokeinterface
19.5 指令的調(diào)用和速度
19.6 方法調(diào)用的實例
19.7 從方法中返回
19.8 隨書光盤
19.9 資源頁
第20章 線程同步
20.1 監(jiān)視器
20.2 對象鎖
20.3 指令集中對同步的支持
20.3.1 同步語句
20.3.2 同步方法
20.4 object類中的協(xié)調(diào)支持
20.5 隨書光盤
20.6 資源頁
附錄a 按操作碼助記符排列的指令集
附錄b 按功能排列的操作碼助記符
附錄c 按操作碼字節(jié)值排列的操作碼助
記符
附錄d java虛擬機的一個模擬:“slices of pi”