發表於2024-11-18
本書作者是Java性能和Java HotSpot 虛擬機領域的佼佼者,幫助你利用現代軟工實踐提高性能,避免常見錯誤,從實戰生涯中總結技巧和竅門。
利用G1剋服並行、串行和CMS垃圾收集器的局限性
瞭解G1 GC收集的各個階段,包括年輕代和老年代
在G1的引擎下微調您的應用程序
確定潛在優化方案,解釋實驗結果,並付諸行動
探索的HotSpot虛擬機內部
使用熱點VM服務代理分析、分流,並解決不同的熱點
本書主要展示瞭如何在當今先進的多核硬件和復雜的操作係統環境下,係統且主動地提高Java 性能。本書對Charlie Hunt 和Binu John 的經典圖書Java Performance 進行延伸,提供瞭兩個強大的Java 平颱創新細節:Garbage First(G1)垃圾收集器和HotSpot 虛擬機服務代理。閱讀本書,你就可以在任何情況下從JDK8 或9 中發揮Java 的*大性能。
李源,碩士,解放軍某醫院醫學信息中心工程師,從事醫學信息化工作10年,在網絡建設、軟件開發及科研方麵具有豐富經驗,熟悉C#、Java、ASP.NET等多種編程語言,曾自主研製國內首套智能防倒號自助掛號係統,並獲得國傢專利。
Charlie Hunt(芝加哥,伊利諾伊州)目前是一名在Oracle主導各種Java SE和HotSpot VM項目的JVM工程師,他的首要關注點在維持吞吐量和延遲的同時減少內存占用量。他也是JavaTM Performance 一書的*一作者。他是JavaOne大會的常任主持,並被公認為是Java超級明星。他同樣是很多會議的發言人,包括QCon、Velocity、GoTo和Dreamforce。Charlie之前為Oracle主導過各種Java SE和HotSpot VM項目,經曆過多個不同性能的崗位,包括在Salesforce.com擔任性能工程架構師,以及在Oracle和Sun Microsystems擔任HotSpot VM性能架構師。他在1998年寫下瞭他的*一個Java應用程序,在1999年作為Java高級架構師加入Sun Microsystems,從那以後一直對Java和JVM的性能抱有熱情。
Monica Beckwith是一位獨立的性能顧問,主要從事優化基於Java虛擬機的服務級係統的客戶應用程序。她過去的工作經曆包括Oracle、Sun Microsystems和AMD。Monica曾經從事用Java HotSpot VM優化JIT編譯器、生成代碼、JVM啓發式算法,以及垃圾收集和垃圾收集器方麵的工作。她是許多會議上的固定發言人並多次發錶主題為垃圾收集、Java內存模型等的文章。Monica領導過Oracle的G1垃圾收集器性能團隊,並被人稱為JavaOne搖滾明星。
Poonam Parhar (聖剋拉拉,加利福利亞州)現在是一名在Oracle的JVM支持工程師,她的主要工作職責是解決針對JRockit和HotSpot VM的客戶升級問題。她喜歡調試和排除故障,並且一直關注著HotSpot VM適用性和可維護性的提升。她明確瞭HotSpot VM裏很多復雜的垃圾收集問題,並且為瞭能更方便進行故障排除和修復垃圾收集器相關的問題,她一直緻力於提升調試工具和産品可維護性。她為可適用性代理調試器做齣很多貢獻,並為它開發瞭一個VisualVM插件。她在2011年的JavaOne會議上分享瞭“適用於SA 的VisualVM插件”。為瞭幫助客戶和Java社區,她通過在https://blogs.oracle.com/poonam/上維護博客來分享自己的工作經驗和知識。
Bengt Rutisson(斯德哥爾摩,瑞典)是一名Oracle的JVM工程師,他在HotSpot工程團隊工作。過去十年一直從事關於JVM裏的垃圾收集器的工作,他最初接觸的是JRockit VM,隨後六年使用HotSpot VM。Bengt是OpenJDK項目中的積極參與者,在特性、穩定性修復以及性能增強方麵做齣瞭許多貢獻。
前言 VII
緻謝 IX
作者介紹 XII
第1章 Garbage First綜述 1
術語 1
並行垃圾收集器 2
串行垃圾收集器 4
並發標記清除(CMS)垃圾收集器 5
收集器的概括總結 7
Garbage First(G1)垃圾收集器 8
G1設計 10
巨型(Humongous)對象 12
Full垃圾收集 12
並發周期 13
堆空間調整 13
引用 14
第2章 深入Garbage First垃圾收集器 15
背景 15
G1中的垃圾收集 16
年輕代 17
年輕代收集暫停 18
對象老化與老年代 19
巨型分區 19
混閤收集 22
收集集閤及其重要性 24
已記憶集閤及其重要性 24
並發優化綫程以及柵欄 28
G1 GC的並發標記 30
並發標記階段 34
初始標記 34
根分區掃描 34
並發標記 34
重新標記 36
清除 36
轉移失敗與Full收集 37
引用 38
第3章 Garbage First垃圾收集器性能優化 39
年輕代收集的各階段 39
所有並行活動的開始 41
外部根分區 42
已記憶集閤和已處理緩衝區 42
已記憶集閤總結 44
轉移和迴收 47
終止 47
GC外部的並行活動 48
所有並行活動總結 48
所有串行活動的啓動 48
其他串行活動 49
年輕代調優 50
並發標記階段調優 52
混閤垃圾收集階段迴顧 54
混閤垃圾收集階段調優 56
避免轉移失敗 59
引用處理 60
觀察引用處理 60
引用處理調優 62
引用 65
第4章 The Serviceability Agent 67
SA是什麼 67
為什麼要用SA 68
SA組件 68
JDK中的SA二進製文件 69
SA的JDK版本說明 69
SA如何獲得Hotspot虛擬機的內部數據結構 70
SA版本對照 71
SA調試工具 72
HSDB 72
HSDB工具 80
命令行Hotspot調試器CLHSDB 100
其他工具 103
CoreDump和崩潰Dump文件 109
調試非本地生成的Core文件 109
SA的共享庫問題 110
消除共享庫問題 110
SA的係統屬性 111
SA的環境變量 113
JDI實現 114
擴展SA工具 115
VisualVM的SA插件 118
VisualVM中怎樣安裝SA插件 119
SA插件使用 119
SA插件功能 120
用SA做故障分析 124
內存溢齣錯誤分析 124
診斷語言層死鎖 132
事後分析Hotspot虛擬機崩潰 137
附錄 虛擬機命令行附加參數探秘 145
索引 155
推薦序1
若乾年前,Charlie Hunt齣過一本Java之父Gosling欣然作序推薦的Java TM
Performance,我現在還記得推薦語中那些星光熠熠的名字——Azul的R大莫樞,阿裏花名叫畢玄的林昊,《深入理解Java虛擬機》的作者周誌明等等。
若乾年後,Charlie Hunt又齣瞭它的姊妹篇Java Performance Companion(中文書名為《Java性能調優指南》)。 這次輪到我被春雨邀來作序,深感榮幸。
與前一本大而全的Java調優聖經相比,這本薄薄的姊妹篇隻深入講解瞭兩件事情:一是很多人知道但並不太精通的G1垃圾收集算法,另一個是JDK自帶的,強大但鮮有人知,麵試裏問誰誰死的工具——HotSpot Serviceability Agent。為什麼要單挑這兩點來齣一本書呢,大概是作者覺得一綫的Java性能調優工程師以及負責Trouble Shooting的大神,都需要掌握這些細節,而目前已有的書籍和文章,又達不到作者期望的深度吧。
與Java程序員相依相伴瞭很多年的CMS垃圾收集算法,隨著現在Java應用的內存越占越大的情況,在暫停時間上有點力不從心瞭。但壓測的經曆告訴我們,不是簡單地把算法改成G1就可以。從十年前G1理論的提齣,到在JDK8裏真正可用,JVM的工程師們反復打磨瞭漫長的時光,可見其實現是相當復雜的。如果真的在生産環境對延時敏感嚴苛的應用上使用它,你需要瞭解更多的實現細節,更多的優化技巧,纔能有足夠的信心去把控未來可能齣現的情況——本書正好提供瞭這方麵的內容。
而另一個SA就更好玩瞭。大部分負責火綫處理狀況的工程師都會用Thread Dump、 Heap Dump 、BTrace來獲取JVM和應用的狀態,偶然間,我也在R大指導下,用過gdb來查找綫程死鎖的原因。其實,JDK還為這些苦惱的救火員們,準備瞭另一份強大的分析工具——SA及其可視化的工具HSDB。可惜搜遍互聯網,也就隻有R大寫過一篇介紹,還有寒泉子和占小狼寫過使用的案例。希望憑這本書,能多製造齣幾個在自己公司裏充當定海神針的大神來。
如果我沒有加入唯品會的基礎架構部,也不會每天睜眼就麵對各種服務調用超時、GC暫停、並發鎖或其他不可描述的奇怪狀況,也不會獲得如此多的鍛煉和感悟。我有感於此,希望有更多的Java程序員,在業務代碼開發之外,永遠對性能優化,對優雅代碼,保持自己的欲望;對各種意外情況,保持好奇心而不是恐懼感。最後做個廣告(嗯,俠少答應的寫序的福利),我的所有這些Java工作的日常與思考,都會寫在個人微信號“春天的旁邊”裏,歡迎來訪。
肖樺(江南白衣)
唯品會高級架構師
推薦序2
俠少邀請我為本書寫序已經挺久瞭,直到2017年春節假期之後纔開始動筆,再拖都有點過意不去瞭,在此還是要感謝下俠少及博文視點對我的信任和包容。
本序主要分為兩部分,一部分是對本書的內容做一個大緻的介紹,另外一部分是簡述下本人走上JVM這條路的心路曆程。
收到本書樣稿之後滿懷期待地看瞭起來,當我第一次看到目錄時還是震驚瞭一下,因為本書的重點在G1 GC和SA,兩者實際上並沒有多大關係,將它們倆閤在一起寫成此書,本人覺得挺新鮮的,而且本書有且僅有這兩者,不過再想想這本書的名字,其實也閤情閤理。
G1 GC是HotSpot重點發展的GC算法,和其他GC算法最大的區彆是弱化瞭分代的概念,引入瞭分區的思想,從JDK8開始算比較穩定瞭,官方也推薦大傢使用G1 GC來替代CMS GC,是未來大傢首選的GC算法。盡管G1希望能做到自適應,但是畢竟每個係統的特性不一樣,最終可能仍然省不瞭參數調優的活,本書從實現的角度來闡述瞭這個算法的各個細節,另外值得一提的是,書中提到的細節完全可以映射到代碼中來一起看,它將帶您一步步揭開G1 GC的神秘麵紗。另外我曾有幸和本書的作者之一——Monica有過一麵之緣,她談及對G1的理解還是讓我挺驚訝的。
SA作為JDK自帶的一款優秀的分析工具,本身就是用Java實現的,所以它可以讓JVM裏的數據結構直接以Java的形式暴露在您麵前,比如說我們方法調用會創建一個棧幀,那這個棧幀在JVM裏是怎樣的結構?又比如我們想要獲取運行時加載的類的字節碼,都可以直接通過API獲取到。另外本書還介紹瞭一個重要的圖形化工具HSDB,它是基於SA實現的,可以讓您更直觀地看到對象在VM裏的數據結構以及對象依賴和被依賴的關係等,這個工具在我們在平時查問題的時候提供瞭極大的便利,可以這麼說吧,如果您熟悉SA的數據結構,那您對JVM的數據結構也算清晰瞭解瞭,它為我們Java開發者打開瞭學習JVM的另外一扇大門。
接下來說說我的經曆吧,其實我算不上JVM領域的前輩,更談不上JVM領域的精英,說是JVM領域的一個新手一點不為過。阿裏是我2010年大學畢業後的第一份工作(目前我還一直在支付寶),它是一個Java王國,對Java重度依賴,然而我在進阿裏之前對Java其實並沒有進行太深入的學習,可以說瞭解的非常少,主要技能集中在Flex/Flash/ActionScript領域,現在沒有進入前端界其實還是有點小遺憾的,因為一直都喜歡所見即所得的這種感覺。進入支付寶之後我從事的是Java框架研發的偏基礎性質的工作,一乾就是三四年,非常感謝這段寶貴的經曆,讓我從前端過渡到瞭後端,同時讓我有足夠多的機會碰到各種中間件周邊技術的疑難雜癥,並不斷嘗試去解決他們。後麵我們框架做大版本升級改造,遷移到標準的OSGI容器equniox上來,於是碰到瞭大量的類加載問題,譬如ClassNotFoundException、LinkageError等這些問題,如果對類加載機製不是很熟悉還是比較難解決的,我們當時僅僅對JDK層麵的類加載機製熟悉,深入到JVM裏的實現就完全是個黑盒瞭,類似LinkageError這種問題在您看瞭JVM裏的實現之後纔可能有更深的理解,就這樣一個偶然的機會開始下載OpenJDK代碼,並研究起JVM來,不過說來也奇怪,在此之後公司碰到的JVM的問題感覺也越來越多瞭,比如內存溢齣、頻繁GC、係統卡死等。我在2014年年底的時候正式加入到瞭阿裏JVM團隊,開始瞭真正的JVM探索之旅。
在探索JVM的過程中,我基本是問題驅動型的,因為我們在平時工作過程中也很容易碰到很多JVM相關的問題,通過一個個攻破這些問題從而積纍瞭不少實踐經驗,對實現原理也慢慢地熟悉起來,針對一些比較有代錶性的文章,我常常會將解決思路記錄成文保存下來,並通過個人博客(http://lovestblog.cn),個人微信公眾號(“你假笨”),或者阿裏內部的ATA技術論壇等進行傳播,希望這些經驗能幫助到更多的人,讓他們少走彎路,更多的精力能花在他們自己的業務開發上麵。
你假笨
阿裏JVM專傢寒泉子
譯者序
早些年用C/C++做開始時,內存管理錯誤一直是程序員們(包括我)在開發中麵對的最大的睏擾之一,各種內存方麵的怪異問題經常把人摺磨的欲仙欲死,當然我也不否認Debug過程極其有效的幫助我更深入的學習瞭內存管理機製。在最初轉嚮Java開發時,我覺得就像籠罩在頭上幾十年的霧霾一下都不見瞭,要對象是嗎?來吧,new一個。再也不用管要不要或什麼時候free或delete。 但隨著瞭解的不斷深入,我們發現天底下真的沒有免費的午餐,有所得也就必有所失。在享受垃圾收集器的便利的同時,也許你就要忍受其帶來效率的降低(原因有很多,比如配置不當)。而且這些年垃圾收集的技術一直在持續發展,是否采用垃圾收集?采用何種垃圾收集?如何調優?等等。一係列的問題,慢慢成為架構設計時就要考慮的問題,而不再僅僅是“自動迴收內存”那麼簡單。於是乎,深入瞭解垃圾收集技術,就十分必要瞭。
垃圾收集技術本身不是一個新技術,各種效率方麵的質疑與探討也不是什麼新話題,而垃圾收集器本身也發展瞭一代一代又一代。但很多開發人員因為工作原因本身,停留在知其然而不知其所以然的層麵上。而本書,針對Java G1垃圾收集器以及調試診斷方麵,做瞭全麵而深入的總結,而專注於G1的書籍目前幾乎是個空白,本書的齣現恰好彌補瞭這方麵的內容。本書的發起者及作者之一的Charlie Hunt,其也是Java應用性能調優聖經《Java性能優化權威指南》的作者,他曾任Oracle公司首席JVM性能工程師,負責HotSpot Java虛擬機和Java SE類庫性能的改進。而其他幾位作者同樣在G1垃圾收集器方麵有非常深厚的功底和豐富的調優經驗。本書作為《Java性能優化權威指南》的姊妹篇,內容可能不如其那麼豐富,但本書在G1的細節方麵會更加的深入與廣泛。
作為譯者,我已經盡可能地避免錯誤和疏漏齣現在譯本中,不過由於譯者本人能力有限,書中難免有些不妥之處,希望廣大讀者與同行批評指正。
最後要感謝電子工業齣版社的張春雨老師與倩雪編輯,感謝他們在我翻譯過程中給予的幫助和包容。同時還要感謝傢人和朋友的寶貴支持,這段時間基本處於失聯狀態,現在我鬍漢三又迴來啦。謝謝你們。
李源
途牛旅遊網供應鏈研發中心總經理
前言
歡迎來到Java
Java性能調優指南 下載 mobi pdf epub txt 電子書 格式 2024
Java性能調優指南 下載 mobi epub pdf 電子書不錯不錯,一直買;很好喝
評分程序員進階必備。很喜歡的書,活動的時候買的,超值。囤起來再看。
評分書不錯,包裝完整,是正版
評分學習學習、學無止境,這本書很薄啊,得和另一本書配閤著看
評分物美價廉。東西不錯。值得購買!!!!!
評分物美價廉。東西不錯。值得購買!!!!!
評分可以,可以,非常可以,她的書都還不錯啊
評分很好!!!!!!!!!!!!!!!!!!!!
評分此用戶未填寫評價內容
Java性能調優指南 mobi epub pdf txt 電子書 格式下載 2024