发表于2024-11-22
深入理解JVM & G1 GC pdf epub mobi txt 電子書 下載 2024
★沒有一招鮮似的調優秘籍或包羅萬象的性能百科
★GC性能調優需要專門的知識技能纔能解決
★解決的GC性能問題越多,技藝纔會越精湛
★《深入理解JVM & G1 GC》不僅有技術實踐,還有設計原理和目標
★讓你深入掌握GC,積纍更多技術與經驗,
★更好地提升産品性能
G1GC提齣瞭不確定性Region,每個空閑Region不是為某個固定年代準備的,它是靈活的,需求驅動的,所以G1GC代錶瞭先進性。
《深入理解JVM&G1GC》主要為學習Java語言的學生、初級程序員提供GC的使用參考建議及經驗,著重介紹瞭G1GC。中國的軟件開發行業已經有幾十年瞭,從目前的行業發展來看,單純的軟件公司很難有發展,目前流行的雲計算、物聯網企業實際上是綜閤性IT技術的整閤,這就需要有綜閤能力的程序員。《深入理解JVM&G1GC》作者力求做到知識的綜閤傳播,而不是僅僅針對Java虛擬機和GC調優進行講解,也力求每一章節都有實際的案例支撐。《深入理解JVM&G1GC》具體包括以下幾方麵:JVM基礎知識、GC基礎知識、G1GC的深入介紹、G1GC調優建議、JDK自帶工具使用介紹等。
通讀《深入理解JVM&G1GC》後,讀者可以深入瞭解G1GC性能調優的許多主題及相關的綜閤性知識。讀者也可以把《深入理解JVM&G1GC》作為參考,對於感興趣的主題,直接跳到相應章節尋找答案。
總的來說,本書對Java GC機製的分析深入淺齣,是對大數據Java內存迴收的優秀實踐。讀完茅塞頓開、受益匪淺。很多技術細節應用之後,對産品性能有明顯提升。在此感謝周明耀的分享,希望他能夠寫齣更多優秀的書籍。
——華為南京研究所大數據産品部維護經理 吳駿
每年都要麵試很多學生,我感覺中國的大學不太注重實際項目開發能力的培養,較為教條,這也是我的係列叢書首先從Java技術開始的原因,它更加接地氣。本書主要為學習Java語言的學生、初級程序員提供JVM和GC的使用和優化建議及經驗,力求做到知識的綜閤傳播,而不是僅僅針對Java虛擬機調優進行講解。本書具體包括以下幾方麵:JVM基礎知識、GC基礎知識、G1 GC的深入介紹、G1 GC調優建議、JDK自帶工具使用介紹等。
——周明耀
序 VII
前言 IX
第1章 JVM & GC基礎知識 1
1.1 引言 2
1.2 基本術語 3
1.2.1 Java相關術語 4
1.2.2 JVM/GC通用術語 24
1.2.3 G1涉及術語 56
1.3 本章小結 62
第2章 JVM & GC深入知識 63
2.1 Java虛擬機內存模型 64
2.1.1 程序計數器 65
2.1.2 虛擬機棧 66
2.1.3 本地方法棧 72
2.1.4 Java堆 73
2.1.5 方法區 79
2.2 垃圾收集算法 82
2.2.1 引用計數法 82
2.2.2 根搜索算法 83
2.2.3 標記-清除算法(Mark-Sweep) 85
2.2.4 復製算法(Copying) 87
2.2.5 標記-壓縮算法(Mark-Compact) 89
2.2.6 增量算法(Incremental Collecting) 90
2.2.7 分代收集算法(Generational Collecting) 91
2.3 Garbage Collection 92
2.3.1 GC概念 92
2.3.2 垃圾收集器分類 93
2.3.3 Serial收集器 94
2.3.4 ParNew收集器 96
2.3.5 Parallel收集器 99
2.3.6 CMS收集器 102
2.3.7 Garbage First(G1)GC 106
2.4 常見問題解析 112
2.4.1 jmap -heap或-histo不能用 112
2.4.2 YGC越來越慢 112
2.4.3 Java永久代去哪兒瞭 114
2.5 本章小結 116
第3章 G1 GC應用示例 117
3.1 範例程序 118
3.2 選項解釋及應用 124
3.3 本章小結 166
第4章 深入G1 GC 167
4.1 G1 GC概念簡述 168
4.1.1 背景知識 168
4.1.2 G1的垃圾迴收機製 169
4.1.3 G1的區間設計靈感 169
4.2 G1 GC分代管理 172
4.2.1 年輕代 172
4.2.2 年輕代迴收暫停 173
4.2.3 大對象區間 174
4.2.4 混閤迴收暫停 176
4.2.5 迴收集閤及其重要性 178
4.2.6 RSet及其重要性 178
4.2.7 並行標記循環 182
4.2.8 評估失敗和完全迴收 186
4.3 G1 GC使用場景 186
4.4 G1 GC論文原文翻譯(部分) 187
4.4.1 開題 187
4.4.2 數據結構/機製 188
4.4.3 未來展望 190
4.5 本章小結 191
第5章 G1 GC性能優化方案 192
5.1 G1的年輕代迴收 193
5.2 年輕代優化 203
5.3 並行標記階段優化 205
5.4 混閤迴收階段 207
5.4.1 初步介紹 207
5.4.2 深入介紹 208
5.5 如何避免齣現GC失敗 210
5.6 引用處理 211
5.6.1 觀察引用處理 212
5.6.2 引用處理優化 213
5.7 本章小結 214
第6章 JVM診斷工具使用介紹 215
6.1 SA基礎介紹 216
6.2 SA工具使用實踐 217
6.2.1 如何啓動SA 217
6.2.2 SA原理及使用介紹 222
6.3 其他工具介紹 231
6.3.1 GCHisto 231
6.3.2 JConsole 232
6.3.3 VisualVM 236
6.4 本章小結 238
2.2.1 引用計數法
引用計數法(Reference Counting)在GC執行垃圾迴收之前,首先需要區分齣內存中哪些是存活對象,哪些是已經死亡的對象。隻有被標記為已經死亡的對象,GC纔會在執行垃圾迴收時,釋放掉其所占用的內存空間,因此這個過程我們可以稱為垃圾標記階段。
引用計數器的實現很簡單,對於一個對象A,隻要有任何一個對象引用瞭A,則A的引用計數器就加1,當引用失效時,引用計數器就減1。隻要對象A的引用計數器的值為0,則對象A就不可能再被使用。也就是說,引用計數器的實現隻需要為每個對象配置一個整形的計數器即可。引用計數器算法的一大優勢就是不用等待內存不夠用的時候,纔進行垃圾的迴收,完全可以在賦值操作的同時檢查計數器是否為0,如果是的話就可以立即迴收。
但是引用計數器有一個嚴重的問題,即無法處理循環引用的情況。一個簡單的循環引用問題的描述如下:有對象A和對象B,對象A中含有對象B的引用,對象B中含有對象A的引用。此時,對象A和對象B的引用計數器都不為0,但是在係統中卻不存在任何第3個對象引用瞭A或B。也就是說,A和B是應該被迴收的垃圾對象,但由於垃圾對象間相互引用,從而使垃圾迴收器無法識彆,引起內存泄漏。
如圖2-6所示,構造瞭一個列錶,將最後一個元素的next屬性指嚮第一個元素,即引用第一個元素,從而構成循環引用。這個時候如果將列錶的頭head賦值為null,此時列錶的各個元素的計數器都不為0,同時也失去瞭對列錶的引用控製,從而導緻列錶元素不能被迴收。
引用計數器擁有一些特性,首先它需要單獨的字段存儲計數器,這樣的做法增加瞭存儲空間的開銷。其次,每次賦值都需要更新計數器,這增加瞭時間開銷。再者,垃圾對象便於辨識,隻要計數器為0,就可作為垃圾迴收。接下來它能方便及時地迴收垃圾,沒有延遲性。最後不能解決循環引用的問題。正是由於最後一條緻命缺陷,導緻在Java的垃圾迴收器中沒有使用這類算法。
2.2.2 根搜索算法
HotSpot和大部分JVM都是使用根搜索算法作為垃圾標記的算法實現。前麵介紹過的引用計數算法盡管實現簡單,執行效率也不錯,但是該算法本身卻存在一個較大的弊端,甚至會影響到垃圾標記的準確性。由於引用計數算法會為程序中的每一個對象都創建一個私有的引用計數器,當目標對象被其他存活對象引用時,引用計數器中的值則會加1,不再引用時便會減1,當引用計數器中的值為0的時候,就意味著該對象已經不再被任何存活對象引用,可以被標記為垃圾對象。采用這種方式看起來似乎沒有任何問題,但是如果一些明顯已經死亡瞭的對象盡管沒有被任何的存活對象引用,但是它們彼此之間卻存在相互引用時,引用計數器中的值則永遠不會為0,這樣便會導緻GC在執行內存迴收時永遠無法釋放掉這種無用對象所占用的內存空間,極有可能引發內存泄漏。
相對於引用計數算法而言,根搜索算法不僅同樣具備實現簡單和執行高效等特點,更重要的是該算法可以有效地解決在引用計數算法中一些已經死亡的對象因相互引用而導緻的無法正確被標記的問題,防止內存泄漏的發生。簡單來說,根搜索算法是以根對象集閤為起始點,按照從上至下的方式搜索被根對象集閤所連接的目標對象是否可達(使用根搜索算法後,內存中的存活對象都會被根對象集閤直接或間接連接著),如果目標對象不可達,就意味著該對象已經死亡,便可以在instanceOopDesc[ HotSpot在C++代碼中用instanceOopDesc類來錶示Java對象,而該類繼承oopDesc,所以HotSpot中的Java對象也自然擁有oopDesc所聲明的頭部。]的Mark World中將其標記為垃圾對象。在根搜索算法中,隻有能夠被根對象集閤直接或者間接連接的對象纔是存活對象。在HotSpot中,根對象集閤中包含瞭5個元素,Java棧內的對象引用、本地方法棧內的對象引用、運行時常量池中的對象引用、方法區中類靜態屬性的對象引用以及與一個類對應的唯一數據類型的Class對象。
★序
這是我第一次為人寫序,心中不免忐忑,引用餘光中先生對於寫序的感受:“我為人寫序,於人為略而於文為詳,用意也無非要就文本去探人本,亦即其藝術人格;自問與中國傳統的序跋並不相悖,但手段畢竟不同瞭。”周明耀的書追求的是人本,我則盡力而為。
周明耀是我以前的同事,我們是認識十多年的朋友,同時我也是他婚禮的伴郎,見證瞭他的一步步成長。周明耀無論對工作、技術,或者社會生活,都有著自己獨特的見解。他始終對技術充滿瞭敬畏之心,學無止境,並付諸實踐。因此,纔有瞭這本書。
以我對GC的理解,想要學習GC,首先需要理解為什麼需要GC。隨著應用程序所應對的業務越來越龐大、復雜,用戶越來越多,沒有GC就不能保證應用程序的正常進行。而經常造成STW的GC又跟不上實際的需求,所以纔會不斷地嘗試對GC進行優化。正如周明耀在文中描述的,HotSpot有這麼多的垃圾迴收器(SerialGC、ParallelGC、ConcurrentMarkSweepGC),為什麼還要發布GarbageFirst(G1)GC?原因就是這個。
當今的商業模式,更多依賴市場的力量,不斷淘汰舊的行業,把有限的資源讓給那些競爭力更強、利潤率更高的企業。類似地,矽榖也在不斷淘汰過時的人員,從全世界吸收新鮮血液。經過半個多世紀的發展,在矽榖地區形成瞭隻有卓越纔能生存的文化理念。本著這樣的理念,GC承擔瞭淘汰垃圾、保存優良資産的任務。正如周明耀所說,隨著G1GC的齣現,GC從傳統的連續堆內存布局設計,逐漸走嚮不連續內存塊,這是通過引入Region概念實現的,也就是說,由一堆不連續的Region組成瞭堆內存。其實也不能說是不連續的,隻是它從傳統的物理連續逐漸變為邏輯上的連續,這是通過Region的動態分配方式實現的,我們可以把一個Region分配給Eden、Survivor、老年代、大對象區間、空閑區間中的任意一個,而不是固定它的作用,因為越是固定,越是呆闆。
總的來說,本書對JavaGC機製的分析深入淺齣,是對大數據Java內存迴收的優秀實踐。讀完茅塞頓開、受益匪淺。很多技術細節應用之後,對産品性能有明顯提升。在此感謝周明耀的分享,希望他能夠寫齣更多優秀的書籍。
華為南京研究所大數據産品部維護經理吳駿
★前言
7歲那年,當我閤上《上下五韆年》一套三冊全書時,我對自己說,我想當個作傢。這一晃27年瞭,等待瞭27年,我的第一本書《大話Java性能優化》在2016年4月正式麵世,2016年8月第二次印刷,感謝讀者的厚愛。第一次印刷時齣現一些錯彆字,請原諒編輯小姑娘,99萬字對她來說確實太多瞭,這是我的責任,未來一定盡全力避免。《深入理解JVM&G1GC;》是我的第二本書,也即將麵世。對於我的每一本書,我都懷著忐忑、驚喜的心情,就像第一次麵對我的女兒“小頑子”,給她取這個小名,是希望她頑強到底,因為我相信,你若頑強到底,一切皆有可能。
我喜歡看書,每年購買的書接近100本,也喜歡技術積纍。一直沒有齣書的想法,直到遇到瞭電子工業齣版社的董老師,在深圳南湖的一席暢談後,我決定做一位業餘的技術作傢,緻力於中國軟件開發行業的技術推廣、普及、推動。
每年都要麵試很多學生,我感覺中國的大學不太注重實際項目開發能力的培養,較為教條,這也是我的係統叢書首先從Java技術開始的原因,它更加接地氣。本書主要為學習Java語言的學生、初級程序員提供JVM和GC的使用和優化建議及經驗,力求做到知識的綜閤傳播,而不是僅僅針對Java虛擬機調優進行講解。本書具體包括以下幾方麵:JVM基礎知識、GC基礎知識、G1GC的深入介紹、G1GC調優建議、JDK自帶工具使用介紹等。
本書基於JDK8,總的來說,沒有一招鮮式的性能調優秘籍或包羅萬象的性能百科,能讓你搖身一變成為老練的GC性能調優專傢。相當數量的GC性能問題還需要專門的知識技能纔能解決。性能調優在很大程度上是一門藝術。解決的GC性能問題越多,技藝纔會越精湛。我們不隻要關心GC的持續演進,也要積極地去瞭解它的設計原理和設計目標。
最後,自我介紹一下,我叫周明耀,研究生學曆,12年工作經驗,IBM開發者論壇專傢作者。我是一名IT技術狂熱愛好者,一名九三學社社員,一名頑強到底的工程師。我推崇技術創新、思維創新,對於新技術非常的熱愛。
感謝我的傢人,和諧的傢庭幫助我完成瞭這本書。我的妻子,她美麗、細心、博學、偶爾不那麼溫柔,但是我很愛她。我的小頑子,她天生性格很像我,希望她能夠踏踏實實做人,保持創新精神,平平安安、健健康康地生活下去。感謝我妻子的父母、我的父母,他們幫我照顧小孩,我纔有時間編寫此書。感謝浙江省特級教師、杭州高級化學老師鄭剋良老師,鄭老師的一句永遠不要放棄,推動著我多年的發展。感謝數學老師張老師在公開場閤對我智商的褒奬,第一次收獲這樣的贊賞,對我這樣內嚮的孩子是多麼的重要,謝謝。
這本書獻給我記憶中的爺爺奶奶、外公外婆,你們給我的都是最美的迴憶。
我相信這本書不是終點,它是麥剋叔叔此生一係列技術書籍的一員,咱們下一本書見。
這本書考下來提高很大,值得購買學習
評分很不錯 還沒開始看
評分好書,正在學習中,寫的很詳細
評分還沒看起來,已經到貨瞭,非常期待呀
評分很不錯的一本書,還在學習中
評分學JAVA必備的一本書,買來隨手翻
評分還沒看起來,已經到貨瞭,非常期待呀
評分不錯,這本書可以看下,等看瞭再追加評論
評分618搞活動入手的,好好給自己充下電,書的印刷質量不錯,內容看過後再來追評。
深入理解JVM & G1 GC pdf epub mobi txt 電子書 下載