G1是目前最成熟的垃圾回收器,已經廣泛應用在眾多公司的生產環境中。我們知道,CMS作為使用最為廣泛的垃圾回收器,也有令人頭疼的問題,即如何對其眾多的參數進行正確的設置。G1的目標就是替代CMS,所以在設計之初就希望降低程序員的負擔,減少人工的介人。但這并不意味著我們完全不需要了解G1的原理和參數調優。
這份PDF嘗試從G1的原理出發,系統地介紹新生代回收、混合回收、FullGC、 并發標記、Refine 線程等內容;同時依托于jdk8u的源代碼介紹Hotspot如何實現G1,通過對源代碼的分析來了解G1提供了哪些參數、這些參數的具體意義;最后PDF內還設計了一些示例代碼,給出了G1在運行這些示例代碼時的日志,通過日志分析來嘗試調整參數并達到性能優化,還分析了參數調整可能帶來的負面影響。
這份PDF的作者是一位阿里P9的大神!
第1章垃圾回收概述
本章介紹垃圾回收的發展及使用的算法,同時還介紹一些重要并常見的術語。該章的知識不僅僅限于本書介紹的G1,對于研讀JVM文章或者JVM源碼都有幫助。
第2章G1的基本概念
本章介紹G1中的基本概念,包括分區、卡表、根集合、線程棧等和垃圾回收相關的基本知識點。
第3章G1的對象分配
本章介紹G1是如何分配對象的,包括TLAB和慢速分配,G1的對象分配和其他垃圾回收器的對象分配非常類似,只不過在分配的時候以分區為基礎,除此之外沒有額外的變化,所以該章知識不僅僅適用于G1也適用于其他垃圾回收器,最后介紹了參數調優,同樣也適用于其他的垃圾回收器。
第4章G1的Refine線程
本章介紹G1 Refine 線程,包括G1如何管理和處理代際引用,從而加快垃圾回收速度,介紹了Refinement 調優涉及的參數;雖然CMS也有卡表處理代際引用,但是G1的處理和CMS并不相同,Refine 線程是G1新引入的部分。
第5章新生代回收
本章介紹新生代回收,包括G1如何進行新生代回收,包括對象標記、復制、分區釋放等細節,還介紹了新生代調優涉及的參數。
第6章混合回收
本章介紹混合回收。主要介紹G1的并發標記算法及其難點,以及G1中如何解決這個難點,同時介紹了并發標記的步驟:并發標記、Remark (再標記)和清理階段;最后還介紹了并發標記的調優參數。
這份藍光版JAVA G1源碼分析和調優PDF,由于內容過多,不浪費大家的時間,小編已經整理成冊,需要免費領取的朋友,麻煩幫忙轉發一下這篇文章+關注我,然后私信【調優】二字獲取。
第7章Full GC
第7章介紹Full GC。在G1中,Full GC對整個堆進行垃圾回收,該章介紹G1的串行FullGC和JDK10之后的并行FullGC算法。
第8章G1中的引用處理
本章介紹垃圾回收過程中如何處理引用,該功能不是G1獨有的,也適用于其他垃圾回收器。
第9章G1 的新特性:字符串去重
第9章介紹G1的新特性:字符串去重。根據OpenJDK的官方文檔,該特性可平均節約內存13%左右,所以這是一個非常有用的特性,值得大家嘗試和使用。另外,該特性和JDK中String類的intern方法有一些類似的地方,所以該章還比較了它們之間的不同。
第10章線程中的安全點
本章介紹線程中的安全點。安全點在實際調優中涉及的并不多,所以很多人并不是特別熟悉。實際上,垃圾回收發生時,在進入安全點中做了不少的工作,而這些工作基本上是串行進行的,這些事情很有可能導致垃圾回收的時間過長。該章除了介紹如何進入安全點之外,還介紹了在安全點中做的一些回收工作,以及當發現它們導致GC過長時該如何調優。
第11章垃圾回收器的選擇、第12章新一代垃圾回收器
這份藍光版Java G1源碼分析和調優PDF,由于內容過多,不浪費大家的時間,小編已經整理成冊,需要免費領取的朋友,麻煩幫忙轉發一下這篇文章+關注我,然后私信【調優】二字獲取。