舉報

會員
JVM G1源碼分析和調優
最新章節:
附錄C 閱讀JVM需要了解的C++知識
G1是目前最成熟的垃圾回收器,已經廣泛應用在眾多公司的生產環境中。我們知道,CMS作為使用最為廣泛的垃圾回收器,也有令人頭疼的問題,即如何對其眾多的參數進行正確的設置。G1的目標就是替代CMS,所以在設計之初就希望降低程序員的負擔,減少人工的介入。但這并不意味著我們完全不需要了解G1的原理和參數調優。筆者在實際工作中遇到過一些因參數設置不正確而導致GC停頓時間過長的問題。但要正確設置參數并不容易,這里涉及兩個方面:第一,需要對G1的原理熟悉,只有熟悉G1的原理才知道調優的方向;第二,能分析和解讀G1運行的日志信息,根據日志信息找到G1運行過程中的異常信息,并推斷哪些參數可以解決這些異常。本書嘗試從G1的原理出發,系統地介紹新生代回收、混合回收、FullGC、并發標記、Refine線程等內容;同時依托于jdk8u的源代碼介紹Hotspot如何實現G1,通過對源代碼的分析來了解G1提供了哪些參數、這些參數的具體意義;最后本書還設計了一些示例代碼,給出了G1在運行這些示例代碼時的日志,通過日志分析來嘗試調整參數并達到性能優化,還分析了參數調整可能帶來的負面影響。
目錄(138章)
倒序
- 封面
- 版權信息
- 前言
- 第1章 垃圾回收概述
- 1.1 Java發展概述
- 1.2 本書常見術語
- 1.3 回收算法概述
- 1.3.1 分代管理算法
- 1.3.2 復制算法
- 1.3.3 標記清除
- 1.3.4 標記壓縮
- 1.3.5 算法小結
- 1.4 JVM垃圾回收器概述
- 1.4.1 串行回收
- 1.4.2 并行回收
- 1.4.3 并發標記回收
- 1.4.4 垃圾優先回收
- 第2章 G1的基本概念
- 2.1 分區
- 2.2 G1停頓預測模型
- 2.3 卡表和位圖
- 2.4 對象頭
- 2.5 內存分配和管理
- 2.6 線程
- 2.6.1 棧幀
- 2.6.2 句柄
- 2.6.3 JVM本地方法棧中的對象
- 2.6.4 Java本地方法棧中的對象
- 2.7 日志解讀
- 2.8 參數介紹和調優
- 第3章 G1的對象分配
- 3.1 對象分配概述
- 3.2 快速分配
- 3.3 慢速分配
- 3.3.1 大對象分配
- 3.3.2 最后的分配嘗試
- 3.4 G1垃圾回收的時機
- 3.4.1 分配時發生回收
- 3.4.2 外部調用的回收
- 3.5 參數介紹和調優
- 第4章 G1的Refine線程
- 4.1 記憶集
- 4.2 Refine線程的功能及原理
- 4.2.1 抽樣線程
- 4.2.2 管理RSet
- 4.2.3 Mutator處理DCQ
- 4.2.4 Refine線程的工作原理
- 4.3 Refinement Zone
- 4.4 RSet涉及的寫屏障
- 4.5 日志解讀
- 4.6 參數介紹和調優
- 第5章 新生代回收
- 5.1 YGC算法概述
- 5.2 YGC代碼分析
- 5.2.1 并行任務
- 5.2.2 其他處理
- 5.3 YGC算法演示
- 5.3.1 選擇CSet
- 5.3.2 根處理
- 5.3.3 RSet處理
- 5.3.4 復制
- 5.3.5 Redirty
- 5.3.6 釋放空間
- 5.4 日志解讀
- 5.4.1 YGC日志
- 5.4.2 大對象日志分析
- 5.4.3 對象年齡日志分析
- 5.5 參數介紹和調優
- 第6章 混合回收
- 6.1 并發標記算法詳解
- 6.2 并發標記算法的難點
- 6.2.1 三色標記法
- 6.2.2 難點示意圖
- 6.2.3 再談寫屏障
- 6.3 G1中混合回收的步驟
- 6.4 混合回收中并發標記處理的線程
- 6.4.1 并發標記線程啟動的時機
- 6.4.2 根掃描子階段
- 6.4.3 并發標記子階段
- 6.4.4 再標記子階段
- 6.4.5 清理子階段
- 6.4.6 啟動混合收集
- 6.5 并發標記算法演示
- 6.5.1 初始標記子階段
- 6.5.2 根掃描子階段
- 6.5.3 并發標記子階段
- 6.5.4 再標記子階段
- 6.5.5 清理子階段
- 6.6 GC活動圖
- 6.7 日志解讀
- 6.8 參數優化
- 第7章 Full GC
- 7.1 Evac失敗
- 7.2 串行FGC
- 7.2.1 標記活躍對象
- 7.2.2 計算對象的新地址
- 7.2.3 更新引用對象的地址
- 7.2.4 移動對象完成壓縮
- 7.2.5 后處理
- 7.3 并行FGC
- 7.3.1 并行標記活躍對象
- 7.3.2 計算對象的新地址
- 7.3.3 更新引用對象的地址
- 7.3.4 移動對象完成壓縮
- 7.3.5 后處理
- 7.4 日志解讀
- 7.5 參數介紹和調優
- 第8章 G1中的引用處理
- 8.1 引用概述
- 8.2 可回收對象發現
- 8.3 在GC時的處理發現列表
- 8.4 重新激活可達的引用
- 8.5 日志解讀
- 8.6 參數介紹和調優
- 第9章 G1的新特性:字符串去重
- 9.1 字符串去重概述
- 9.2 日志解讀
- 9.3 參數介紹和調優
- 9.4 字符串去重和String.intern的區別
- 9.5 String.intern中的實現
- 第10章 線程中的安全點
- 10.1 安全點的基本概念
- 10.2 G1并發線程進入安全點
- 10.3 解釋線程進入安全點
- 10.4 編譯線程進入安全點
- 10.5 正在執行本地代碼的線程進入安全點
- 10.6 安全點小結
- 10.7 日志分析
- 10.8 參數介紹和調優
- 第11章 垃圾回收器的選擇
- 11.1 如何衡量垃圾回收器
- 11.2 G1調優的方向
- 第12章 新一代垃圾回收器
- 12.1 Shenandoah
- 12.2 ZGC
- 附錄A 編譯調試JVM
- 附錄B 本地內存跟蹤
- 附錄C 閱讀JVM需要了解的C++知識 更新時間:2019-04-22 18:15:25
推薦閱讀
- OpenDaylight Cookbook
- JavaScript高效圖形編程
- Clojure for Domain:specific Languages
- Git高手之路
- Learning SQLite for iOS
- Python高級編程
- Java深入解析:透析Java本質的36個話題
- Learning ArcGIS Pro
- PLC編程及應用實戰
- 創意UI:Photoshop玩轉APP設計
- Instant jQuery Boilerplate for Plugins
- 深入淺出 HTTPS:從原理到實戰
- 產品架構評估原理與方法
- Socket.IO Cookbook
- 3D Printing Designs:Design an SD Card Holder
- Instant SQL Server Analysis Services 2012 Cube Security
- Learning VMware vCloud Air
- Python語言及其應用(第2版)
- 湖南省大學生計算機程序設計競賽試題與應用軟件開發類作品集萃(2005—2016)
- Build Gamified Websites with PHP and jQuery
- Web安全之強化學習與GAN
- 思維訓練啟蒙新觀念:青少年Pascal語言編程搶先起跑一路通
- Learning Object-Oriented Programming
- Python極客項目編程(第2版)
- Java EE Development with Eclipse
- Kali Linux 2:Assuring Security by Penetration Testing(Third Edition)
- Practical Data Analysis(Second Edition)
- Python網絡爬蟲從入門到精通
- The Applied SQL Data Analytics Workshop
- Scala for Java Developers