幫助中心 | 我的帳號 | 關於我們

實戰Java虛擬機(JVM故障診斷與性能優化第2版)

  • 作者:葛一鳴
  • 出版社:電子工業
  • ISBN:9787121367748
  • 出版日期:2019/07/01
  • 裝幀:平裝
  • 頁數:436
人民幣:RMB 89 元      售價:
放入購物車
加入收藏夾

內容大鋼
    不管技術如何發展,Java依然是一個充滿活力的生態圈,學習Java的人也越來越多,但多數人學習Java虛擬機(JVM)時都會遇到瓶頸。本書將通過200余個示例詳細介紹JVM中的各種參數配置、故障排查、性能監控及性能優化,幫助Java人突破瓶頸。
    本書共11章,修訂后版本涵蓋Java 6?Java 10。第1?3章介紹了Java虛擬機的定義、總體架構、常用配置參數。第4?5章介紹了垃圾回收的演算法和各種垃圾回收器。第6章介紹了Java虛擬機的性能監控和故障診斷工具。第7章詳細介紹了對Java堆的分析方法和案例。第8章介紹了Java虛擬機對多線程,尤其是對鎖的支持。第9?10章介紹了Java虛擬機的核心——Class文件結構,以及Java虛擬機中類的裝載系統。第11章介紹了Java虛擬機的執行系統和位元組碼,並給出了通過ASM框架進行位元組碼注入的案例。
    本書不僅適合Java程序員閱讀,還適合工作于Java虛擬機之上的研發人員、軟體設計師、架構師閱讀。

作者介紹
葛一鳴
    葛一鳴,51CTO特約講師,國家認證系統分析師,獲得Oracle OCP認證。長期從事、Java軟體開發工作,對Java程序設計、JVM有深入的研究,對設計模式、人工智慧、神經網路、數據挖掘等技術有濃厚興趣,著有《自己動手寫神經網路》電子書,也開設了在線的《深入淺出Java虛擬機——入門篇》培訓課程,有問題可聯繫作者個人博客www.uucode.net。

目錄
第1章  初探Java虛擬機
  1.1  知根知底:追溯Java的發展歷程
    1.1.1  那些依托Java虛擬機的語言大咖們
    1.1.2  Java發展史上的里程碑
  1.2  跨平台的真相:Java虛擬機做中介
    1.2.1  理解Java虛擬機的原理
    1.2.2  看清Java虛擬機的種類
  1.3  一切看我的:Java語言規範
    1.3.1  詞法的定義
    1.3.2  語法的定義
    1.3.3  數據類型的定義
    1.3.4  Java語言規範總結
  1.4  一切聽我的:Java虛擬機規範
  1.5  數字編碼就是電腦世界的水和電
    1.5.1  整數在Java虛擬機中的表示
    1.5.2  浮點數在Java虛擬機中的表示
  1.6  拋磚引玉:編譯和調試虛擬機
  1.7  小結
第2章  認識Java虛擬機的基本結構
  2.1  謀全局者才能成大器:看穿Java虛擬機的架構
  2.2  小參數能解決大問題:學會設置Java虛擬機的參數
  2.3  對象去哪兒:辨清Java堆
  2.4  函數如何調用:出入Java棧
    2.4.1  局部變數表
    2.4.2  操作數棧
    2.4.3  幀數據區
    2.4.4  棧上分配
  2.5  類去哪兒了:識別方法區
  2.6  小結
第3章  常用Java虛擬機參數
  3.1  一切運行都有跡可循:掌握跟蹤調試參數
    3.1.1  跟蹤垃圾回收——讀懂虛擬機日誌
    3.1.2  類載入/卸載的跟蹤
    3.1.3  查看系統參數
  3.2  讓性能飛起來:學習堆的配置參數
    3.2.1  最大堆和初始堆的設置
    3.2.2  新生代的配置
    3.2.3  堆溢出處理
  3.3  別讓性能有缺口:了解非堆內存的參數配置
    3.3.1  方法區配置
    3.3.2  棧配置
    3.3.3  直接內存配置
  3.4  Client和Server二選一:虛擬機的工作模式
  3.5  小結
第4章  垃圾回收的概念與演算法
  4.1  內存管理清潔工:認識垃圾回收
  4.2  清潔工具大PK:討論常用的垃圾回收演算法
    4.2.1  引用計數法(Reference Counting)
    4.2.2  標記清除法(Mark-Sweep)
    4.2.3  複製演算法(Copying)

    4.2.4  標記壓縮法(Mark-Compact)
    4.2.5  分代演算法(Generational Collecting)
    4.2.6  分區演算法(Region)
  4.3  誰才是真正的垃圾:判斷可觸及性
    4.3.1  對象的復活
    4.3.2  引用和可觸及性的強度
    4.3.3  軟引用——可被回收的引用
    4.3.4  弱引用——發現即回收
    4.3.5  虛引用——對象回收跟蹤
  4.4  垃圾回收時的停頓現象:Stop-The-World案例實戰
  4.5  小結
第5章  垃圾收集器和內存分配
  5.1  一心一意一件事:串列回收器
    5.1.1  新生代串列回收器
    5.1.2  老年代串列回收器
  5.2  人多力量大:並行回收器
    5.2.1  新生代ParNew回收器
    5.2.2  新生代ParallelGC回收器
    5.2.3  老年代ParallelOldGC回收器
  5.3  一心多用都不落下:CMS回收器(JDK 8及之前的版本)
    5.3.1  CMS主要工作步驟
    5.3.2  CMS主要的參數
    5.3.3  CMS的日誌分析
    5.3.4  有關Class的回收
  5.4  未來我做主:G1回收器(JDK 9及之後版本的默認回收器)
    5.4.1  G1的內存劃分和主要收集過程
    5.4.2  G1的新生代GC
    5.4.3  G1的併發標記周期
    5.4.4  混合回收
    5.4.5  必要時的Full GC
    5.4.6  G1的日誌
    5.4.7  G1相關的參數
  5.5  回眸:有關對象內存分配和回收的一些細節問題
    5.5.1  禁用System.gc()
    5.5.2  System.gc()使用併發回收
    5.5.3  並行GC前額外觸發的新生代GC
    5.5.4  對象何時進入老年代
    5.5.5  在TLAB上分配對象
    5.5.6  finalize()函數對垃圾回收的影響
  5.6  溫故又知新:常用的GC參數
  5.7  動手才是真英雄:垃圾回收器對Tomcat性能影響的實驗
    5.7.1  配置實驗環境
    5.7.2  配置性能測試工具JMeter
    5.7.3  配置Web應用伺服器Tomcat
    5.7.4  實戰案例1——初試串列回收器
    5.7.5  實戰案例2——擴大堆以提升系統性能
    5.7.6  實戰案例3——調整初始堆大小
    5.7.7  實戰案例4——使用ParrellOldGC回收器
    5.7.8  實戰案例5——使用較小堆提高GC壓力
    5.7.9  實戰案例6——測試ParallelOldGC的表現

    5.7.10  實戰案例7——測試ParNew回收器的表現
      5.7.11  實戰案例8——測試JDK 1.8  的表現
    5.7.12  實戰案例9——使用高版本虛擬機提升性能
  5.8  小結
第6章  性能監控工具
  6.1  有我更高效:Linux下的性能監控工具
    6.1.1  顯示系統整體資源使用情況——top命令
    6.1.2  監控內存和CPU——vmstat命令
    6.1.3  監控I/O——iostat命令
    6.1.4  多功能診斷器——pidstat工具
  6.2  用我更高效:Windows下的性能監控工具
    6.2.1  任務管理器
    6.2.2  perfmon性能監控工具
    6.2.3  Process Explorer進程管理工具
    6.2.4  pslist命令——Windows下也有命令行工具
  6.3  外科手術刀:JDK性能監控工具
    6.3.1  查看Java進程——jps命令
    6.3.2  查看虛擬機運行時信息——jstat命令
    6.3.3  查看虛擬機參數——jinfo命令
    6.3.4  導出堆到文件——jmap命令
    6.3.5  JDK自帶的堆分析工具——jhat命令
    6.3.6  查看線程堆棧——jstack命令
    6.3.7  遠程主機信息收集——jstatd命令
    6.3.8  多功能命令行——jcmd命令
    6.3.9  性能統計工具——hprof
    6.3.10  擴展jps命令
  6.4  我是你的眼:圖形化虛擬機監控工具JConsole
    6.4.1  JConsole連接Java程序
    6.4.2  Java程序概況
    6.4.3  內存監控
    6.4.4  線程監控
    6.4.5  類載入情況
    6.4.6  虛擬機信息
  6.5  一目瞭然:可視化性能監控工具Visual VM
    6.5.1  Visual VM連接應用程序
    6.5.2  監控應用程序概況
    6.5.3  Thread Dump和分析
    6.5.4  性能分析
    6.5.5  內存快照分析
    6.5.6  BTrace介紹
  6.6  來自JRockit的禮物:虛擬機診斷工具Mission Control
    6.6.1  MBean伺服器
    6.6.2  飛行記錄器(Flight Recorder)
  6.7  小結
第7章  分析Java堆
  7.1  對症才能下藥:找到內存溢出的原因
    7.1.1  堆溢出
    7.1.2  直接內存溢出
    7.1.3  過多線程導致OOM
    7.1.4  永久區溢出

    7.1.5  GC效率低下引起的OOM
  7.2  無處不在的字元串:String在虛擬機中的實現
    7.2.1  String對象的特點
    7.2.2  有關String的內存泄漏
    7.2.3  有關String常量池的位置
  7.3  虛擬機也有內窺鏡:使用MAT分析Java堆
    7.3.1  初識MAT
    7.3.2  淺堆和深堆
    7.3.3  MAT堆分析案例解析
    7.3.4  支配樹(Dominator Tree)
    7.3.5  Tomcat堆溢出分析
  7.4  篩選堆對象:MAT對OQL的支持
    7.4.1  Select子句
    7.4.2  From子句
    7.4.3  Where子句
    7.4.4  內置對象與方法
  7.5  更精彩的查找:Visual VM對OQL的支持
    7.5.1  Visual VM的OQL基本語法
    7.5.2  內置heap對象
    7.5.3  對象函數
    7.5.4  集合/統計函數
    7.5.5  程序化OQL分析Tomcat堆
  7.6  小結
第8章  鎖與併發
  8.1  安全就是鎖存在的理由:鎖的基本概念和實現
    8.1.1  理解線程安全
    8.1.2  對象頭和鎖
  8.2  避免殘酷的競爭:鎖在Java虛擬機中的實現和優化
    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.3.4  鎖粗化
  8.4  無招勝有招:無鎖
    8.4.1  理解CAS
    8.4.2  原子操作
    8.4.3  新寵兒LongAdder
  8.5  將隨機變為可控:理解Java內存模型
    8.5.1  原子性
    8.5.2  有序性
    8.5.3  可見性
    8.5.4  Happens-Before原則
  8.6  小結
第9章  Class文件結構
  9.1  不僅跨平台,還能跨語言:語言無關性

  9.2  虛擬機的基石:Class文件
    9.2.1  Class文件的標誌——魔數
    9.2.2  Class文件的版本
    9.2.3  存放所有常數——常量池
    9.2.4  Class的訪問標記(Access Flag)
    9.2.5  當前類、父類和介面
    9.2.6  Class文件的欄位
    9.2.7  Class文件的方法基本結構
    9.2.8  方法的執行主體——Code屬性
    9.2.9  記錄行號——LineNumberTable屬性
    9.2.10  保存局部變數和參數——LocalVariableTable屬性
    9.2.11  加快位元組碼校驗——StackMapTable屬性
    9.2.12  Code屬性總結
    9.2.13  拋出異常——Exceptions屬性
    9.2.14  用實例分析Class的方法結構
    9.2.15  我來自哪裡——SourceFile屬性
    9.2.16  強大的動態調用——BootstrapMethods屬性
    9.2.17  內部類——InnerClasses屬性
    9.2.18  將要廢棄的通知——Deprecated屬性
    9.2.19  Class文件總結
  9.3  操作位元組碼:走進ASM
    9.3.1  ASM體系結構
    9.3.2  ASM之Hello World
  9.4  小結
第10章  Class裝載系統
  10.1  來去都有序:看懂Class文件的裝載流程
    10.1.1  類裝載的條件
    10.1.2  載入類
    10.1.3  驗證類
    10.1.4  準備
    10.1.5  解析類
    10.1.6  初始化
  10.2  一切Class從這裡開始:掌握ClassLoader
    10.2.1  認識ClassLoader,看懂類載入
    10.2.2  ClassLoader的分類
    10.2.3  ClassLoader的雙親委託模式
    10.2.4  雙親委託模式的弊端
    10.2.5  雙親委託模式的補充
    10.2.6  突破雙親模式
    10.2.7  熱替換的實現
  10.3  小結
第11章  位元組碼執行
  11.1  代碼如何執行:位元組碼執行案例
  11.2  執行的基礎:Java虛擬機常用指令介紹
    11.2.1  常量入棧指令
    11.2.2  局部變數壓棧指令
    11.2.3  出棧裝入局部變數表指令
    11.2.4  通用型操作
    11.2.5  類型轉換指令
    11.2.6  運算指令

    11.2.7  對象操作指令
    11.2.8  比較控制指令
    11.2.9  函數調用與返回指令
    11.2.10  同步控制
    11.2.11  再看Class的方法結構
  11.3  更上一層樓:再看ASM
    11.3.1  為類增加安全控制
    11.3.2  統計函數執行時間
  11.4  誰說Java太刻板:Java Agent運行時修改類
    11.4.1  使用-javaagent參數啟動Java虛擬機
    11.4.2  使用Java Agent為函數增加計時功能
    11.4.3  動態重轉換類
    11.4.4  有關Java Agent的總結
  11.5  與時俱進:動態方法調用
    11.5.1  方法句柄使用實例
    11.5.2  調用點使用實例
    11.5.3  反射和方法句柄
    11.5.4  指令invokedynamic使用實例
  11.6  跑得再快點:靜態編譯優化
    11.6.1  編譯時計算
    11.6.2  變數字元串的連接
    11.6.3  基於常量的條件語句裁剪
    11.6.4  switch語句的優化
  11.7  提高虛擬機的執行效率:JIT及其相關參數
    11.7.1  開啟JIT編譯
    11.7.2  JIT編譯閾值
    11.7.3  多級編譯器
    11.7.4  OSR棧上替換
    11.7.5  方法內聯
    11.7.6  設置代碼緩存大小
  11.8  小結

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032