JRockit 權威指南 : 深入理解 JVM Oracle JRockit: The Definitive Guide

Marcus Hirt , Marcus Lagergren 曹旭東

買這商品的人也買了...

商品描述

本書面向所有以Java編程語言為工作中心的開發人員和系統管理員,分為3大部分。第一部分著重介紹了JVM和自適應運行時的工作原理,並以JRockit為例專門介紹到底什麽是好的Java代碼。第二部分介紹JRockit Mission Control套件的具體功能,以及如何使用JRockit Mission Control套件來查找應用程序的性能瓶頸。第三部分介紹Java發展方向。

作者簡介

Marcus Hirt

JRockit核心開發者,Appeal Virtual Machines公司聯合創始人,目前任職於Oracle Java產品組。


Marcus Lagergren

JRockit代碼生成器架構和項目負責人,Appeal Virtual Machines創始成員。
2016年Java Champion得主,一直致力於Java語言的開發和改進。

曹旭東

畢業於哈工大,目前就職於滴滴,從事後端應用開發工作,另有譯作《深入剖析Tomcat》。

目錄大綱

第1章起步1
1.1獲取JRockit JVM 1
1.2將應用程序遷移到JRockit 2
1.2.1命令行選項3
1.2.2行為差異3
1.3 JRockit版本號的命名規則4
1 .4獲取幫助5
1.5小結5

第2章自適應代碼生成6
2.1平台無關性6
2.2 Java虛擬機7
2.2.1基於棧的虛擬機8
2.2.2字節碼格式8
2.3代碼生成策略10
2.3.1純解釋執行10
2.3.2靜態編譯11
2.3.3完全JIT編譯12
2.3.4混合模式12
2.4自適應代碼生成13
2.4.1判斷熱方法14
2.4.2優化動態程序14
2.5深入JIT編譯器16
2.5.1處理字節碼16
2.5.2字節碼“優化器” 18
2.5.3優化字節碼21
2.6代碼流水線22
2.6.1為什麼JRockit沒有字節碼解釋器22
2.6.2啟動23
2.6.3運行時代碼生成24
2. 6.4代碼生成概述26
2.7控制代碼生成38
2.8小結42

第3章自適應內存管理43
3.1自動內存管理43
3.1.1自適應內存管理44
3.1.2自動內存管理的優點44
3. 1.3自動內存管理的缺點45
3.2堆管理基礎45
3.2.1對象的分配與釋放45
3.2.2碎片與整理45
3.3垃圾回收算法47
3.3.1引用計數47
3.3.2引用跟踪47
3.3.3 STW 50
3.3.4分代垃圾回收55
3.3.5吞吐量與延遲57
3.3.6 JRockit中的垃圾回收58
3.4性能與伸縮性60
3.4.1線程局部分配60
3.4.2更大的堆內存61
3.4.3緩存友好性64
3.4.4 NUMA架構65
3.4.5大內存頁66
3.4.6自適應67
3.5近實時垃圾回收69
3.5.1軟實時與硬實時69
3.5.2 JRockit Real Time 69
3.6內存操作相關的API 72
3.6. 1析構方法72
3.6.2 Java中的引用73
3.6.3 JVM的行為差異75
3.7陷阱與偽優化75
3.8 JRockit中的內存管理76
3.8.1基本參數76
3.8.2壓縮引用78
3.8.3高級選項78
3.9小結79

第4章線程與同步80
4.1基本概念80
4.1.1難以調試82
4.1.2難以優化82
4.2 Java API 84
4.2.1 synchronized關鍵字84
4.2.2 java.lang.Thread類84
4.2.3 java.util.concurrent包85
4.2.4信號量85
4.2.5 volatile關鍵字87
4.3 Java中線程與同步機制的實現88
4.3.1 Java內存模型88
4.3.2同步的實現91
4.3.3同步在字節碼中的實現96
4.3.4線程的實現99
4.4對於線程與同步的優化100
4.4.1鎖膨脹與鎖收縮100
4.4.2遞歸鎖101
4.4.3鎖融合101
4.4.4延遲解鎖102
4.5陷阱與偽優化105
4.5.1 Thread.stop、Thread.resume和Thread.suspend 105
4.5.2雙檢查鎖106
4.6相關命令行參數107
4.6.1檢查鎖與延遲解鎖107
4.6.2輸出調用棧信息108
4.6.3鎖分析110
4. 6.4設置線程棧的大小111
4.6.5使用命令行參數控制鎖的行為111
4.7小結111

第5章基準測試與性能調優113
5.1為何要進行基準測試113
5.1 .1制定性能目標114
5.1.2對性能進行回歸測試114
5.1.3確定優化方向115
5.1.4商業應用115
5.2如何構建基準測試116
5.2.1置身事外116
5 .2.2多次測量118
5.2.3微基準測試118
5.2.4測試前熱身121
5.3確定測試目標122
5.3.1吞吐量122
5.3.2兼顧吞吐量、響應時間和延遲122
5.3.3伸縮性122
5.3.4電力消耗124
5.3.5其他問題124
5.4工業級基準測試124
5.4.1 SPEC基準測試套件124
5.4.2 SipStone基準測試128
5.4.3 DaCapo基準測試128
5.4.4真實場景下的應用程序128
5. 5基準測試的潛在風險128
5.6性能調優129
5.6.1非規範化行為129
5.6.2調優目標130
5.7常見性能瓶頸與規避方法138
5.7.1命令行參數-XXaggressive 138
5.7.2析構函數139
5.7.3引用對象過多139
5.7.4對像池139
5.7.5算法與數據結構140
5.7.6誤用System.gc() 141
5.7.7線程數太多141
5.7.8鎖競爭導致性能瓶頸142
5.7.9不必要的異常142
5.7.10大對象144
5.7.11本地內存與堆內存144
5.8 wait方法、notify方法與胖鎖145
5.8.1堆的大小設置不當145
5.8.2存活對象過多145
5.8.3 Java並非萬能145
5.9小結146

第6章JRockit Mission Control套件147
6.1背景介紹147
6.1.1採樣分析與準確分析148
6.1.2用途廣泛149
6.2概述150
6.2.1 JRockit Mission Control的服務器端組件151
6.2.2 JRockit Mission Control的客戶端組件151
6.2.3術語介紹153
6.2.4獨立運行JRockit Mission Control 153
6.2.5在Eclipse中運行JRockit Mission Control 154
6.2. 6遠程管理JRockit 155
6.2.7安全限制159
6.2.8處理連接問題160
6.3更新點162
6.4調試JRockit Mission Control 162
6.5小結164

第7章Management Console 165
7.1 JMX Management Console 165
7.2 Management Console 166
7.2.1一般信息標籤組166
7.2.2 MBean標籤組171
7.2.3運行時標籤組174
7.2.4高級標籤組176
7.2.5其他標籤組177
7.3擴展JRockit Mission Control Console 178
7.4小結181

第8章JRockit Runtime Analyzer 182
8.1反饋信息的必要性182
8.2分析JRA記錄185
8.2. 1一般信息標籤組185
8.2.2內存標籤組186
8.2.3代碼標籤組188
8.2.4線程/鎖標籤組190
8.2.5延遲標籤組192
8.2.6使用操作集195
8.3故障排除197
8.4小結198

第9章JRockit Flight Recorder 199
9.1 JRA進化199
9.1.1關於事件200
9.1.2記錄引擎200
9.1.3啟動參數202
9.2在JRockit Mission Control中使用JFR 203
9.3與JRA的區別205
9.3.1範圍選擇器205
9.3.2操作集206
9.3.3關聯鍵206
9.3.4延遲分析206
9.3.5異常分析207
9.3.6內存分析209
9.4自定義事件210
9.5擴展JFR 213
9.6小結215

第10章Memory Leak Detector 216
10.1 Java內存洩漏216
10.1.1靜態編程語言中的內存洩漏216
10.1.2自動內存管理中的內存洩漏217
10.2檢測Java中的內存洩漏217
10.3 Memleak簡介218
10.4追踪內存洩漏219
10.5交互式追踪內存洩漏224
10.6通用堆分析器226
10. 7追踪內存分配227
10.8問題排查227
10.9小結228

第11章JRCMD 229
11.1簡介229
11.2覆蓋SIGQUIT信號處理句柄230
11.3 JRCMD的限制232
11.4 JRCMD命令參考232
11 .4.1 check_flightrecording(R28) 232
11.4.2 checkjrarecording(R27) 233
11.4.3 command_line 234
11.4.4 dump_flightrecording(R28) 234
11.4.5 heap_diagnostics(R28) 234
11.4.6 hprofdump(R28) 237
11.4.7 kill_management_server 238
11.4.8 list_vmflags(R28) 238
11.4.9 lockprofile_print 239
11.4.10 lockprofile_reset 240
11.4.11 memleakserver 240
11. 4.12 oom_diagnostics(R27) 240
11.4.13 print_class_summary 240
11.4.14 print_codegen_list 241
11.4.15 print_memusage(R27) 242
11.4.16 print_memusage(R28) 243
11.4.17 print_object_summary 247
11 .4.18 print_properties 249
11.4.19 print_threads 250
11.4.20 print_utf8pool 251
11.4.21 print_vm_state 251
11.4.22 run_optfile(R27) 252
11.4.23 run_optfile(R28) 252
11.4 .24 runfinalization 253
11.4.25 runsystemgc 253
11.4.26 set_vmflag(R28) 253
11.4.27 start_flightrecording(R28) 253
11.4.28 start_management_server 254
11.4.29 startjrarecording(R27) 255
11.4.30 stop_flightrecording(R28) 256
11.4 .31 timestamp 256
11.4.32 verbosity 256
11.4.33 version 257
11.5小結258

第12章JRockit Management API 259
12.1 JMAPI 259
12.2 JMXMAPI 263
12.2.1 JRockit內部性能計數器264
12.2.2使用JMXMAPI構建可遠程操作的JRCMD 266
12.3小結270

第13章JRockit Virtual Edition 271
13.1虛擬化簡介272
13.1.1全虛擬化272
13.1.2半虛擬化273
13.1.3其他虛擬化術語273
13.1.4虛擬機管理程序273
13.1.5虛擬化的優勢275
13.1.6虛擬化的劣勢275
13.2 Java虛擬化276
13.2.1 JRockit Virtual Edition 277
13.2.2虛擬機鏡像與管理框架279
13.2.3 JRockit VE的優勢284
13.2.4 JRockit VE的限制287
13. 3虛擬化能媲美真實環境嗎287
13.3.1高質量的熱點代碼採樣288
13.3.2自適應堆大小288
13.3.3線程間的頁保護289
13.4小結291
附錄A參考文獻292
附錄B術語表296