發表於2024-11-05
1、係統介紹係統調優的解決思路和技術實現
2、結閤大傢熟知的12306、電商等案例
3、架構、設計、開發、算法等多層次多角度思路和策略
4、涉及內存、IO等各種問題,提供豐富的經驗參考
5、語言通俗易懂,引人入勝
《大話Java性能優化》主要提供Java性能調優方麵的參考建議及經驗交流。作者力求做到知識的綜閤傳播,而不是僅僅隻針對Java虛擬機調優進行講解,另外力求每一章節都有實際的案例支撐。具體包括:性能優化策略、程序編寫及硬件服務器的基礎知識、JavaAPI優化建議、算法類程序的優化建議、並行計算優化建議、Java程序性能監控及檢測、JVM原理知識、其他相關優化知識等。
通讀《大話Java性能優化》後,讀者可以深入瞭解Java性能調優的許多主題及相關的綜閤性知識。讀者也可以把《大話Java性能優化》作為參考,對於感興趣的主題,直接跳到相應章節尋找答案。
總的來說,性能調優在很大程度上是一門藝術,解決的Java性能問題越多,技藝纔會越精湛。我們不僅要關心JVM的持續演進,也要積極地去瞭解底層的硬件平颱和操作係統的進步。
周明耀
12年投資銀行項目、分布式計算項目工作經驗,IBM開發者論壇專傢作者。
一名IT技術狂熱愛好者,一名頑強到底的工程師。推崇技術創新、思維創新,對於新技術非常的熱愛,緻力於技術研發、研究,通過發布文章、書籍、互動活動的形式積極推廣軟件技術。
歡迎添加作者微信“michael_tec”,共同探討IT技術話題。
係統調優在軟件的後續改進和重構中占有很大的地位,能夠彌補前述的不足,本書以通俗的語言和引人入勝的故事,重點講述軟件性能調優的方法論和具體實現路徑,讀者可以根據自己的實際情況進行參照比對,就像進瞭兵器庫挑選閤適自己的順手武器。
程序湊閤著上綫是一迴事,而在壓力下能夠優美地運行往往很不容易。本書對於所有有誌於進行軟件高級管理的人員而言,具有非常重要的意義。
——海適雲承CEO兼首席架構師 瀋英桓(Sam Shen)
當我翻開周明耀先生編寫的《大話Java性能優化》這本書時,一下子被他生動樸實的語言所深深吸引,他將生硬、深奧的IT係統技術問題深入淺齣地層層剝開,娓娓道來,並結閤時下大傢熟知的12306、電商等案例,係統地分析和介紹瞭係統調優的重要性、解決思路和技術實現。
作為金融IT的一名同行,我對係統性能對用戶體驗和業務處理的重要性深有體會,尤其是高頻交易係統(HFT),對係統性能的要求近乎苛刻,對業務的處理和響應要求毫秒級。本書作者從係統架構、係統設計、開發、編碼、算法等多層次多角度提供思路和優化策略,是一本很務實的技術貼,值得大傢學習、藉鑒和探討。
——德意誌銀行(中國)有限公司環球科技運營經理 黃正兵
在我自己使用Java開發項目的過程中,經常會切實地感受到係統調優的重要性。然而Java性能調優並不是一項一蹴而就的簡單任務,而是如同並發編程需要關注算法、內存、I/O等各種問題以及豐富的經驗積纍。
本書中作者結閤自己的實踐經驗總結瞭一些性能優化的方案。這些經驗涉及Java基本語法、對象和引用、String類型和集閤類的使用等各個方麵且附有示例,使人受益匪淺,如果能夠將其靈活運用到自己的係統中,相信能夠對讀者處理性能優化問題提供不小的幫助。此外,作者看待性能優化問題的視角相對開闊,係統且詳盡地討論瞭可能導緻性能問題的各個環節和不同角度下性能優化的問題,讀後令人豁然開朗。
——西安工業大學2016應屆碩士畢業生 Fenny
第1章 性能調優策略概述 1
1.1 為什麼需要調優 1
1.2 性能優化的參考因素 5
1.2.1 傳統計算機體係的分歧 5
1.2.2 導緻係統瓶頸的計算資源 7
1.2.3 程序性能衡量指標 8
1.2.4 性能優化目標 9
1.2.5 性能優化策略 10
1.3 性能調優分類方法 11
1.3.1 業務方麵 12
1.3.2 基礎技術方麵 12
1.3.3 組件方麵 17
1.3.4 架構方麵 19
1.3.5 層次方麵 20
1.4 本章小結 21
第2章 優化前的準備知識 22
2.1 服務器知識 23
2.1.1 內存 23
2.1.2 GPU/CPU 44
2.1.3 硬盤 49
2.1.4 網絡架構 51
2.2 新興技術 53
第3章 Java API調用優化建議 54
3.1 麵嚮對象及基礎類型 55
3.1.1 采用Clone()方式創建對象 55
3.1.2 避免對boolean判斷 55
3.1.3 多用條件操作符 56
3.1.4 靜態方法代替實例方法 56
3.1.5 有條件地使用final關鍵字 58
3.1.6 避免不需要的instanceof操作 58
3.1.7 避免子類中存在父類轉換 59
3.1.8 建議多使用局部變量 60
3.1.9 運算效率最高的方式——位運算 60
3.1.10 用一維數組代替二維數組 62
3.1.11 布爾運算代替位運算 64
3.1.12 提取錶達式優化 65
3.1.13 不要總是使用取反操作符(!) 66
3.1.14 不要重復初始化變量 66
3.1.15 變量初始化過程思考 66
3.1.16 對象的創建、訪問過程 69
3.1.17 在switch語句中使用字符串 70
3.1.18 數值字麵量的改進 73
3.1.19 優化變長參數的方法調用 74
3.1.20 針對基本數據類型的優化 75
3.1.21 空變量 76
3.2 集閤類概念 77
3.2.1 快速刪除List裏麵的數據 78
3.2.2 集閤內部避免返迴null 80
3.2.3 ArrayList、LinkedList比較 82
3.2.4 Vector、HashTable比較 85
3.2.5 HashMap使用經驗 87
3.2.6 EnumSet、EnumMap 91
3.2.7 HashSet使用經驗 92
3.2.8 LinkedHashMap、TreeMap比較 96
3.2.9 集閤處理優化新方案 99
3.2.10 優先考慮並行計算 107
3.3 字符串概念 108
3.3.1 String對象 108
3.3.2 善用String對象的SubString方法 111
3.3.3 用charat()代替startswith() 113
3.3.4 在字符串相加的時候,使用' '代替" " 114
3.3.5 字符串切割 114
3.3.6 字符串重編碼 117
3.3.7 閤並字符串 118
3.3.8 正則錶達式不是萬能的 122
3.4 引用類型概念 123
3.4.1 強引用(Strong Reference) 126
3.4.2 軟引用(Soft Reference) 131
3.4.3 弱引用(Weak Reference) 135
3.4.4 引用隊列 141
3.4.5 虛引用(Phantom Reference) 142
3.5 其他相關概念 146
3.6 本章小結 175
第4章 程序設計優化建議 176
4.1 算法優化概述 176
4.2 設計模式 196
4.3 I/O及網絡相關優化 225
4.5 其他優化 256
4.6 本章小結 269
第5章 Java並行程序優化建議 270
5.1 並行程序優化概述 270
5.1.8 綫程池的使用 290
5.2 鎖機製對比 296
5.3 增加程序並行性 310
5.4 JDK類庫使用 319
5.5 本章小結 376
第6章 JVM性能測試及監控 377
6.1 監控計算機設備層 378
6.2 監控JVM活動 428
6.3 本章小結 438
第7章 JVM性能調優建議 439
7.1 JVM相關概念 439
7.2 JVM係統架構 451
7.3 垃圾迴收機製相關 459
7.4 實用JVM實驗 490
7.5 本章小結 515
第8章 其他優化建議 516
8.1 Java現有機製及未來發展 516
8.2 係統架構優化建議 528
8.3 與編程無關 546
8.4 本章小結
8.2.2.1 一般性軟件項目優化案例
假設我們有這麼一個項目,外部係統D通過係統對外提供的REST API接口從係統內部獲取信息,從中提取齣有效的信息,並通過JDBC存儲到某數據庫係統S中,以便供係統其他部分使用,上述操作的執行頻率為每天一次,一般在午夜當係統空閑時定時執行。為瞭實現高可用性(High Availability),外部係統D部署在兩颱服務器上,因此需要分彆從這兩颱服務器上獲取信息並將信息插入數據庫中,有效信息的條數達到瞭上韆條,數據庫插入操作次數則為有效信息條數的兩倍。係統架構圖如圖8-1所示。
圖8-1 係統架構圖
為瞭快速地實現預期效果,在最初的實現中優先考慮瞭功能的實現,而未考慮係統性能和代碼可讀性等。係統大緻有以下的實現。
(1)REST API獲取信息、數據庫操作可能拋齣的異常信息都被記錄到日誌文件中,作為調試用。
(2)共有5次數據庫連接操作,包括第一次清空數據庫錶,針對兩個外部係統D各有兩次數據庫插入操作,這5個連接都是獨立的,用完之後即釋放。
(3)所有的數據庫插入語句都是使用java.sql.Statement類生成的。
(4)所有的數據庫插入語句,都是單條執行的,即生成一條執行一條。
(5)整個過程都是在單個綫程中執行的,包括數據庫錶清空操作,數據庫插入操作,釋放數據庫連接。
(6)數據庫插入操作的JDBC代碼散布在代碼中。雖然這個版本的係統可以正常運行,達到瞭預期的效果,但是效率很低,從通過 REST API獲取信息,到解析並提取有效信息,再到數據庫插入操作,總共耗時100秒左右。而預期的時間應該在一分鍾以內,這顯然是不符閤要求的。
開始分析整個過程有哪些耗時操作,以及如何提升效率,縮短程序執行的時間。通過REST API獲取信息,因為是使用外部係統提供的API,所以無法在此處提升效率;取得信息之後解析齣有效部分,因為是對特定格式的信息進行解析,所以也無效率提升的空間。綜上所述,效率可以大幅度提升的空間在數據庫操作部分以及程序控製部分。
針對日誌的優化
因為從兩颱服務器的外部係統D上獲取到的信息是相同的,所以數據庫插入操作會拋齣異常,異常信息類似於“Attempt to insert duplicate record”,這樣的異常信息跟有效信息的條數相等,有上韆條。這種情況是能預料到的,所以可以考慮關閉日誌記錄,或者不關閉日誌記錄而是更改日誌輸齣級彆,隻記錄嚴重級彆(severe level)的錯誤信息,並將此類操作的日誌級彆調整為警告級彆(warning level),這樣就不會記錄以上異常信息瞭。本項目使用的是 Java 自帶的日誌記錄類,以下配置文件將日誌輸齣級彆設置為嚴重級彆。
通過上述的優化之後,性能有瞭大幅度的提升,從原來的100秒左右降到瞭50秒左右。為什麼僅僅不記錄日誌就能有如此大幅度的性能提升呢?查閱資料,發現已經有人做瞭相關的研究與實驗。經常聽到Java程序比C/C++程序慢的言論,但是運行速度慢的真正原因是什麼,估計很多人並不清楚。對於CPU密集型的程序(即程序中包含大量計算),Java程序可以達到C/C++程序同等級彆的速度,但是對於I/O密集型的程序(即程序中包含大量I/O操作),Java程序的速度就遠遠慢於C/C++程序瞭,很大程度上是因為C/C++程序能直接訪問底層的存儲設備。因此,不記錄日誌而得到大幅度性能提升的原因是,Java程序的I/O操作較慢,是一個很耗時的操作。
針對數據庫連接的優化
假設程序中共有若乾次數據庫連接操作,每次都需重新建立數據庫連接,數據庫插入操作完成之後又立即釋放瞭,數據庫連接沒有被復用。為瞭做到共享數據庫連接,可以通過單例模式 (Singleton Pattern)獲得一個相同的數據庫連接,每次數據庫連接操作都共享這個數據庫連接。這裏沒有使用數據庫連接池(Database Connection Pool)是因為在程序隻有少量的數據庫連接操作,隻有在大量並發數據庫連接的時候纔需要連接池。
通過上述的優化之後,性能有瞭小幅度的提升,從50秒左右降到瞭40秒左右。共享數據庫連接而得到的性能提升的原因是,數據庫連接是一個耗時耗資源的操作,需要同遠程計算機進行網絡通信,建立TCP連接,還需要維護連接狀態錶,建立數據緩衝區。如果共享數據庫連接,則隻需要進行一次數據庫連接操作,省去瞭多次重新建立數據庫連接的時間。
針對數據庫插入數據的優化
針對多綫程的優化
......
序
最大的思想紊亂是相信人們想要相信的事情。
——路易斯?巴斯德(Louis Pasteuer)
Michael周是個具有豐富程序經曆的架構師和項目管理者,他從國內作坊式的軟件開發公司起步,經曆瞭著名的谘詢公司凱捷的歐洲工作洗禮,後來於美國花旗軟件擔任高級軟件技術總監,平時常常思考和總結21世紀以來我國軟件開發者,特彆是Java開發工程師的睏惑。
我們通常情況下,一開始可以有條不紊地進行軟件需求定義和分析,隨著上綫時間的不斷追近,麵對客戶的咄咄逼人的需求修改和即刻變更需求上綫壓力,程序員作為弱勢群體,往往會考慮時間優先原則,很難守住按部就班的開發計劃和開發方式,從而導緻齣現瞭軟件質量的大幅度下降。軟件一定存在修改的餘地,但是程序員們通常不相信自己的係統存在諸多問題,尤其是感覺自己已經做得相當完美。係統調優在軟件的後續改進和重構中占有很大的地位,能夠彌補前述的不足,本書以通俗的語言和引人入勝的故事,重點講述軟件性能調優的方法論和具體實現路徑,讀者可以根據自己的實際情況進行參照比對,就像進瞭兵器庫挑選閤適自己的順手武器。
程序湊閤著上綫是一迴事,而能夠優美地運行在壓力下往往很不容易。本書對於所有有誌於進行軟件高級管理的人員而言,具有非常重要的意義。
海適雲承CEO兼首席架構師 瀋英桓(Sam Shen)
前 言
7歲那年,當我閤上《上下五韆年》一套三冊書籍時,我對自己說,我想當個作傢。這一晃27年瞭,等待瞭27年,我的第一本書《大話Java性能優化》即將麵世瞭。我是多麼的忐忑、驚喜,就像第一次麵對我的女兒“小頑子”,給她取這個小名,希望她頑強到底,因為我相信,你若頑強到底,一切皆有可能。
從15歲擁有自己第一颱電腦算起,已經有接近20年的計算機學習時間,加上11年的工作經曆,我對於工作,對於工程師這個職業,有一些自己的感悟。我認為,職業素養非常重要。
1929年,在汪精衛的支持下,餘雲岫等人提齣瞭全麵廢除中醫、禁止中醫的提案,並很快獲得初審通過。在這樣的局麵下,全國各地中醫師多次到南京請願,雖有孫科等人的支持,但反響不大。相持階段,無獨有偶,汪精衛的嶽母身患痢疾,西醫師醫治無效,京城四大名醫之一的施今墨先生毅然赴汪府。施今墨憑脈,每言必中,使汪精衛的嶽母心服口服,頻頻點頭稱是。處方時施今墨說:“安心服藥,一診可愈,不必復診。”病危至此,一診可愈?眾人皆疑。據此處方僅服數劑,果如施今墨所言。汪精衛不得不服中醫,最終撤迴提案。施老先生醫德高尚,死後遺體都捐獻齣來供科學研究,絕不是阿諛奉承之人,他赴汪府,完全是因為對中醫生這個職業的尊重,為瞭讓人知道中醫的深奧。
戒口
佛教五戒之一的不妄語,要求我們不欺騙他人、不在不清楚實際情況的時候鬍亂說話,放到職場,也可以加上信息安全的要求。
《越絕書》載文種述九術時說:“故曰九者勿患,戒口勿傳,以取天下不難,況於吳乎?”文種希望勾踐秘而不宣,以免人多口雜,泄露機密。每個人都有自己的崗位、職責,我們要做的是做好自己的事情,不對不屬於自己工作範圍內的事情評價、傳播,不在背後說同事的壞話。作為一名技術人員,如果不能做到戒口、靜心、專心,那我覺得你應該盡早轉行,你不適閤,也絕不會成為一名技術大拿。
氣場
一位職業的工作者,他身上有一種稱為氣場的東西存在。人的氣場是看不見的,但這種力量是巨大的,就像萬有引力一樣,我們每個人身上的這種氣場無時無刻不在影響你的人生。這種氣場的行程與你的觀念、信仰、環境、朋友、呼吸、事物、欲望、靜息與睡眠相關。一個人的氣質很好,外錶精神、有修養、有道德,這個人的氣場就好,就會吸引好的事,吸引好的運氣。每個人都會遇到各種各樣的苦難,但是我堅信,你若頑強到底,一切皆有可能。
教養
看不見的教養很難。在烏閤之眾中誰能保持優雅和教養?在群體無意識中誰能保持清醒和判斷?更難的是那些“慎獨”的教養。日本有一種文化,叫作“不給彆人添麻煩”的文化,我們每個人在做事之前都應該考慮是否自己的行為會給彆人造成麻煩。教養不是道德規範,也不是小學生行為準則,其實也並不跟文化程度、社會發展、經濟水平掛鈎,它更是一種體諒,體諒彆人的不容易,體諒彆人的處境和習慣。對於教養,我個人的理解是,謙遜是一種教養,自尊更是。
心態
尼剋?鬍哲說過,人們經常埋怨什麼也做不來,但如果我們隻記掛著想擁有或欠缺的東西,而不去珍惜所擁有的,那根本改變不瞭問題!真正改變命運的,並不是我們的機遇,而是我們的態度。
一個人的心態很是重要,心量小的人,芝麻大小的事情也能在心裏翻江倒海。心量大的人,即使在危機麵前也能鎮靜自若。同樣一件事情,掀起的波瀾大小卻因人而異。有一句話很好,用於技術人員我覺得尤其閤適,“想要成為一棵大樹,就不要去和草爭”。
一個人的成就,不得以金錢衡量,而是一生中,你善待過多少人,有多少人懷念你。成功並非單指事業,無論是愛好或職業上的成功都隻是成就。成功應該是多元化的,如人的一生包含瞭很多追求一樣,而非單一指嚮。然後,無論你多有成就,真正的成功,就是陪伴傢人。所有的情感都是需要陪伴的,這些陪伴成為一個個美好的迴憶,這些都是整個傢庭最寶貴、最重要的財富,這些遠遠超越 大話Java性能優化 下載 mobi epub pdf txt 電子書 格式
大話Java性能優化 下載 mobi pdf epub txt 電子書 格式 2024
大話Java性能優化 下載 mobi epub pdf 電子書早就想買瞭。趕上活動,太閤適瞭
評分不錯,沒有壞,包裝很好,下次繼續
評分質量不錯,好好研究下要!!!!
評分非常不錯的一本書,快遞也很快,必須好評!!
評分買瞭很多書,比較喜歡紙質的,就是有點費錢,哈哈(?ω?)hiahiahia 為瞭提高自己也得買啊~~~
評分早就想買瞭。趕上活動,太閤適瞭
評分滿300-200入手,太劃算瞭。
評分脈絡清晰
評分很好,很滿意!。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
大話Java性能優化 mobi epub pdf txt 電子書 格式下載 2024