出版時(shí)間:2012-9-1 出版社:清華大學(xué)出版社 作者:葛一鳴 頁(yè)數(shù):400 字?jǐn)?shù):649000
Tag標(biāo)簽:無(wú)
前言
關(guān)于JavaJava是目前應(yīng)用最為廣泛的軟件開(kāi)發(fā)平臺(tái)之一。隨著Java以及Java社區(qū)的不斷壯大,Java也早已不再是簡(jiǎn)簡(jiǎn)單單的一門計(jì)算機(jī)語(yǔ)言了,它更是一個(gè)平臺(tái)、一種文化、一個(gè)社區(qū)。作為一個(gè)平臺(tái),JVM虛擬機(jī)扮演著舉足輕重的作用。除了Java語(yǔ)言,任何一種能夠被編譯成字節(jié)碼的計(jì)算機(jī)語(yǔ)言都屬于Java這個(gè)平臺(tái)。Groovy、Scala、JRuby等都是Java平臺(tái)的一個(gè)部分,它們依賴于JVM虛擬機(jī),同時(shí),Java平臺(tái)也因?yàn)樗鼈冏兊酶迂S富多彩。作為一種文化,Java幾乎成為了“開(kāi)源”的代名詞。在Java程序中,有著數(shù)不清的開(kāi)源軟件和框架,如Tomcat、Struts、Hibernate、Spring等等。就連JDK和JVM自身也有不少開(kāi)源的實(shí)現(xiàn)如OpenJDK、Harmony??梢哉f(shuō),“共享”的精神在Java世界里體現(xiàn)得淋漓盡致。作為一個(gè)社區(qū),Java擁有無(wú)數(shù)的開(kāi)發(fā)人員,數(shù)不清的論壇、資料。從桌面應(yīng)用軟件、嵌入式開(kāi)發(fā)到企業(yè)級(jí)應(yīng)用、后臺(tái)服務(wù)器、中間件,都可以看到Java的身影。其應(yīng)用形式之復(fù)雜、參與人數(shù)之龐大也令人咋舌??梢哉f(shuō),Java社區(qū)已經(jīng)儼然成為了一個(gè)良好而龐大的生態(tài)系統(tǒng)。此外,純粹作為一門軟件開(kāi)發(fā)語(yǔ)言,Java非常容易學(xué)習(xí),其學(xué)習(xí)曲線較C++等老牌計(jì)算機(jī)語(yǔ)言相比,也比較平緩。因?yàn)樗M力簡(jiǎn)化或去除了C++中許多晦澀、多余和難以理解的部分,如指針、虛函數(shù)、多繼承等。本書(shū)架構(gòu)本書(shū)主要介紹Java應(yīng)用程序的優(yōu)化方法和技巧,總共分為6章。第1章是綜述,介紹了性能的基本概念,兩個(gè)重要的定律(木桶原理和Amdahl定律),以及系統(tǒng)調(diào)優(yōu)的一般過(guò)程與注意事項(xiàng)。第2章從設(shè)計(jì)層面,介紹了與性能相關(guān)的設(shè)計(jì)模式、組件以及有助于改善性能的軟件設(shè)計(jì)思想。第3章從代碼層面介紹了如何編寫(xiě)高性能的Java代碼。涉及的主要內(nèi)容有:字符串的優(yōu)化處理、文件I/O的優(yōu)化、核心數(shù)據(jù)庫(kù)結(jié)構(gòu)的使用、Java的引用類型以及一些常用的慣例。第4章介紹了并行程序開(kāi)發(fā)的相關(guān)內(nèi)容,以及如何通過(guò)多線程提高系統(tǒng)性能。先后介紹了并發(fā)設(shè)計(jì)模式、線程池、并發(fā)數(shù)據(jù)結(jié)構(gòu)的使用、并發(fā)控制方法、“鎖”的優(yōu)化、無(wú)鎖的使用以及協(xié)程。第5章立足于JVM虛擬機(jī)層面,介紹了如何通過(guò)設(shè)置合理的JVM參數(shù)提升Java程序的性能。第6章為工具篇,主要介紹了獲取和監(jiān)控程序或系統(tǒng)性能指標(biāo)的各種工具,以及Java應(yīng)用程序相關(guān)的故障排查工具。本書(shū)特點(diǎn)本書(shū)的主要特點(diǎn)有:· 專注于介紹Java應(yīng)用程序的優(yōu)化方法、技巧和思想,并深度剖析JDK的部分實(shí)現(xiàn)。· 具有較強(qiáng)的層次性和連貫性,依次介紹了在軟件設(shè)計(jì)層面、代碼層面、JVM虛擬機(jī)層面的優(yōu)化方法。· 理論結(jié)合實(shí)際,使用豐富的示例幫助讀者理解理論知識(shí)。閱讀人群要通讀本書(shū)并取得良好的學(xué)習(xí)效果,要求讀者需要具備Java的基本知識(shí)。本書(shū)不是一本幫助初學(xué)者入門的書(shū)籍。因此,本書(shū)適合以下讀者:· 擁有一定開(kāi)發(fā)經(jīng)驗(yàn)的Java開(kāi)發(fā)人員· Java軟件設(shè)計(jì)師、架構(gòu)師· 系統(tǒng)調(diào)優(yōu)人員· 有一定的Java基礎(chǔ)并希望更進(jìn)一步的程序員本書(shū)的約定本書(shū)在敘述過(guò)程中,有如下約定:· 本書(shū)中所述的JDK 1.5、JDK 1.6等同于JDK 5、JDK 6。· 如無(wú)特殊說(shuō)明,JVM虛擬機(jī)均指Hot Spot虛擬機(jī)。· 如無(wú)特殊說(shuō)明,本書(shū)的程序、示例均在JDK 1.6環(huán)境中運(yùn)行。下載提示本書(shū)涉及的源程序請(qǐng)讀者直接登錄清華大學(xué)出版社網(wǎng)站,搜索到本書(shū)頁(yè)面后按照提示進(jìn)行下載。感謝在本書(shū)的寫(xiě)作過(guò)程中,我充滿著感激之情。首先是對(duì)我的家人,在本書(shū)完稿前,父親病重,但我由于工作上的繁忙未能抽出太多時(shí)間照顧他,幸好得到了母親的大力支持和父親的諒解,我才能夠鼓足勇氣,全身心投入到寫(xiě)作之中。同時(shí),母親對(duì)我的悉心照料也讓我更加能夠?qū)W⒌焦ぷ髦?。同時(shí),我要感謝我的工作單位UT斯達(dá)康以及兩位前輩Rex Zhu和Tao Tao。正是他們?cè)谄綍r(shí)工作中對(duì)我的細(xì)心指導(dǎo),才能讓我有所進(jìn)步和積累。而這一切,正是本書(shū)的基礎(chǔ)。最后,再次感謝我的母親,祝她身體健康。葛一鳴
內(nèi)容概要
Java是目前應(yīng)用最為廣泛的軟件開(kāi)發(fā)平臺(tái),學(xué)習(xí)針對(duì)Java程序的優(yōu)化方法有重要的現(xiàn)實(shí)意義?!禞ava程序性能優(yōu)化:讓你的Java程序更快、更穩(wěn)定》以Java性能調(diào)優(yōu)為主線,系統(tǒng)地闡述了與Java性能優(yōu)化相關(guān)的知識(shí)與技巧。
《Java程序性能優(yōu)化:讓你的Java程序更快、更穩(wěn)定》共6章,先后從軟件設(shè)計(jì)、軟件編碼、JVM調(diào)優(yōu)以及程序故障排斥等方面介紹針對(duì)Java程序的優(yōu)化方法。第1章介紹性能的基本概念、定律、系統(tǒng)調(diào)優(yōu)的過(guò)程和注意事項(xiàng)。第2章從設(shè)計(jì)層面介紹與性能相關(guān)的設(shè)計(jì)模式、組件。第3章從代碼層面介紹如何編寫(xiě)高性能的Java程序。第4章介紹了并行開(kāi)發(fā)和如何通過(guò)多線程提高系統(tǒng)性能。第5章立足于JVM虛擬機(jī)層面,介紹如何通過(guò)設(shè)置合理的JVM參數(shù)提升Java程序的性能。第6章為工具篇,介紹了獲取和監(jiān)控程序或系統(tǒng)性能指標(biāo)的各種工具,包括相關(guān)的故障排查工具。
本書(shū)適合所有Java程序員、軟件設(shè)計(jì)師、架構(gòu)師以及軟件開(kāi)發(fā)愛(ài)好者,對(duì)于有一定經(jīng)驗(yàn)的Java工程師,本書(shū)更能幫助他突破技術(shù)瓶頸,深入Java內(nèi)核開(kāi)發(fā)!
作者簡(jiǎn)介
葛一鳴,畢業(yè)于浙江工業(yè)大學(xué),獲得了計(jì)算機(jī)軟件與理論專業(yè)碩士學(xué)位。取得了國(guó)家認(rèn)證系統(tǒng)分析師職稱、OCP(Oracle數(shù)據(jù)庫(kù)認(rèn)證專家)。現(xiàn)就職于UT斯達(dá)康通訊有限公司,從事Java軟件開(kāi)發(fā)。有多年的軟件開(kāi)發(fā)經(jīng)驗(yàn),參與開(kāi)發(fā)過(guò)多個(gè)軟件項(xiàng)目。熟悉Java、PHP、MySQL、Oracle等開(kāi)發(fā)語(yǔ)言和數(shù)據(jù)庫(kù),對(duì)Java軟件開(kāi)發(fā)、性能優(yōu)化、分布式軟件有著濃厚的興趣和深入的研究。在校期間曾經(jīng)發(fā)表過(guò)多篇技術(shù)論文。
書(shū)籍目錄
第1章 Java性能調(diào)優(yōu)概述
1.1 性能概述
1.1.1 看懂程序的性能
1.1.2 性能的參考指標(biāo)
1.1.3 木桶原理與性能瓶頸
1.1.4 Amdahl定律
1.2 性能調(diào)優(yōu)的層次
1.2.1 設(shè)計(jì)調(diào)優(yōu)
1.2.2 代碼調(diào)優(yōu)
1.2.3 JVM調(diào)優(yōu)
1.2.4 數(shù)據(jù)庫(kù)調(diào)優(yōu)
1.2.5 操作系統(tǒng)調(diào)優(yōu)
1.3 基本調(diào)優(yōu)策略和手段
1.3.1 優(yōu)化的一般步驟
1.3.2 系統(tǒng)優(yōu)化注意事項(xiàng)
1.4 小結(jié)
第2章 設(shè)計(jì)優(yōu)化
2.1 善用設(shè)計(jì)模式
2.1.1 單例模式
2.1.2 代理模式
2.1.3 享元模式
2.1.4 裝飾者模式
2.1.5 觀察者模式
2.1.6 Value Object模式
2.1.7 業(yè)務(wù)代理模式
2.2 常用優(yōu)化組件和方法
2.2.1 緩沖(Buffer)
2.2.2 緩存(Cache)
2.2.3 對(duì)象復(fù)用——“池”
2.2.4 并行替代串行
2.2.5 負(fù)載均衡
2.2.6 時(shí)間換空間
2.2.7 空間換時(shí)間
2.3 小結(jié)
第3章 Java程序優(yōu)化
3.1 字符串優(yōu)化處理
3.1.1 String對(duì)象及其特點(diǎn)
3.1.2 subString()方法的內(nèi)存泄漏
3.1.3 字符串分割和查找
3.1.4 StringBuffer和StringBuilder
3.2 核心數(shù)據(jù)結(jié)構(gòu)
3.2.1 List接口
3.2.2 Map接口
3.2.3 Set接口
3.2.4 優(yōu)化集合訪問(wèn)代碼
3.2.5 RandomAccess接口
3.3 使用NIO提升性能
3.3.1 NIO的Buffer類族和Channel
3.3.2 Buffer的基本原理
3.3.3 Buffer的相關(guān)操作
3.3.4 MappedByteBuffer性能評(píng)估
3.3.5 直接內(nèi)存訪問(wèn)
3.4 引用類型
3.4.1 強(qiáng)引用
3.4.2 軟引用
3.4.3 弱引用
3.4.4 虛引用
3.4.5 WeakHashMap類及其實(shí)現(xiàn)
3.5 有助于改善性能的技巧
3.5.1 慎用異常
3.5.2 使用局部變量
3.5.3 位運(yùn)算代替乘除法
3.5.4 替換switch
3.5.5 一維數(shù)組代替二維數(shù)組
3.5.6 提取表達(dá)式
3.5.7 展開(kāi)循環(huán)
3.5.8 布爾運(yùn)算代替位運(yùn)算
3.5.9 使用arrayCopy ()
3.5.10 使用Buffer進(jìn)行I/O操作
3.5.11 使用clone()代替new
3.5.12 靜態(tài)方法替代實(shí)例方法
3.6 小結(jié)
第4章 并行程序開(kāi)發(fā)及優(yōu)化
4.1 并行程序設(shè)計(jì)模式
4.1.1 Future模式
4.1.2 Master-Worker模式
4.1.3 Guarded Suspension模式
4.1.4 不變模式
4.1.5 生產(chǎn)者-消費(fèi)者模式
4.2 JDK多任務(wù)執(zhí)行框架
4.2.1 無(wú)限制線程的缺陷
4.2.2 簡(jiǎn)單的線程池實(shí)現(xiàn)
4.2.3 Executor框架
4.2.4 自定義線程池
4.2.5 優(yōu)化線程池大小
4.2.6 擴(kuò)展ThreadPoolExecutor
4.3 JDK并發(fā)數(shù)據(jù)結(jié)構(gòu)
4.3.1 并發(fā)List
4.3.2 并發(fā)Set
4.3.3 并發(fā)Map
4.3.4 并發(fā)Queue
4.3.5 并發(fā)Deque
4.4 并發(fā)控制方法
4.4.1 Java內(nèi)存模型與volatile
4.4.2 同步關(guān)鍵字synchronized
4.4.3 ReentrantLock重入鎖
4.4.4 ReadWriteLock讀寫(xiě)鎖
4.4.5 Condition對(duì)象
4.4.6 Semaphore信號(hào)量
4.4.7 ThreadLocal線程局部變量
4.5 “鎖”的性能和優(yōu)化
4.5.1 線程的開(kāi)銷
4.5.2 避免死鎖
4.5.3 減小鎖持有時(shí)間
4.5.4 減小鎖粒度
4.5.5 讀寫(xiě)分離鎖來(lái)替換獨(dú)占鎖
4.5.6 鎖分離
4.5.7 重入鎖ReentrantLock和內(nèi)部鎖synchronized
4.5.8 鎖粗化(Lock Coarsening)
4.5.9 自旋鎖(Spinning Lock)
4.5.10 鎖消除(Lock Elimination)
4.5.11 鎖偏向(Biased Lock)
4.6 無(wú)鎖的并行計(jì)算
4.6.1 非阻塞的同步/無(wú)鎖
4.6.2 原子操作
4.6.3 Amino框架介紹
4.6.4 Amino集合
4.6.5 Amino樹(shù)
4.6.6 Amino圖
4.6.7 Amino簡(jiǎn)單調(diào)度模式
4.7 協(xié)程
4.7.1 協(xié)程的概念
4.7.2 Kilim框架簡(jiǎn)介
4.7.3 Task及其狀態(tài)
4.7.4 Fiber及其狀態(tài)
4.7.5 Kilim開(kāi)發(fā)環(huán)境配置
4.7.6 Kilim之Hello World
4.7.7 多任務(wù)通信
4.7.8 Kilim實(shí)例及性能評(píng)估
4.8 小結(jié)
第5章 JVM調(diào)優(yōu)
5.1 Java虛擬機(jī)內(nèi)存模型
5.1.1 程序計(jì)數(shù)器
5.1.2 Java虛擬機(jī)棧
5.1.3 本地方法棧
5.1.4 Java堆
5.1.5 方法區(qū)
5.2 JVM內(nèi)存分配參數(shù)
5.2.1 設(shè)置最大堆內(nèi)存
5.2.2 設(shè)置最小堆內(nèi)存
5.2.3 設(shè)置新生代
5.2.4 設(shè)置持久代
5.2.5 設(shè)置線程桟
5.2.6 堆的比例分配
5.2.7 堆分配參數(shù)總結(jié)
5.3 垃圾收集基礎(chǔ)
5.3.1 垃圾收集的作用
5.3.2 垃圾回收算法與思想
5.3.3 垃圾收集器的類型
5.3.4 評(píng)價(jià)GC策略的指標(biāo)
5.3.5 新生代串行收集器
5.3.6 老年代串行收集器
5.3.7 并行收集器
5.3.8 新生代并行回收(Parallel Scavenge)收集器
5.3.9 老年代并行回收收集器
5.3.10 CMS收集器
5.3.11 G1收集器(Garbage First)
5.3.12 Stop the World案例
5.3.13 收集器對(duì)系統(tǒng)性能的影響
5.3.14 GC相關(guān)參數(shù)總結(jié)
5.4 常用調(diào)優(yōu)案例和方法
5.4.1 將新對(duì)象預(yù)留在新生代
5.4.2 大對(duì)象進(jìn)入老年代
5.4.3 設(shè)置對(duì)象進(jìn)入老年代的年齡
5.4.4 穩(wěn)定與震蕩的堆大小
5.4.5 吞吐量?jī)?yōu)先案例
5.4.6 使用大頁(yè)案例
5.4.7 降低停頓案例
5.5 實(shí)用JVM參數(shù)
5.5.1 JIT編譯參數(shù)
5.5.2 堆快照(堆Dump)
5.5.3 錯(cuò)誤處理
5.5.4 取得GC信息
5.5.5 類和對(duì)象跟蹤
5.5.6 控制GC
5.5.7 選擇類校驗(yàn)器
5.5.8 Solaris下線程控制
5.5.9 使用大頁(yè)
5.5.10 壓縮指針
5.6 實(shí)戰(zhàn)JVM調(diào)優(yōu)
5.6.1 Tomcat簡(jiǎn)介與啟動(dòng)加速
5.6.2 Web應(yīng)用程序介紹
5.6.3 JMeter介紹與使用
5.6.4 調(diào)優(yōu)前Web應(yīng)用運(yùn)行狀況
5.6.5 調(diào)優(yōu)過(guò)程
5.7 總結(jié)
第6章 Java性能調(diào)優(yōu)工具
6.1 Linux命令行工具
6.1.1 top命令
6.1.2 sar命令
6.1.3 vmstat命令
6.1.4 iostat命令
6.1.5 pidstat工具
6.2 Windows工具
6.2.1 任務(wù)管理器
6.2.2 perfmon性能監(jiān)控工具
6.2.3 Process Explorer
6.2.4 pslist命令行
6.3 JDK命令行工具
6.3.1 jps命令
6.3.2 jstat命令
6.3.3 jinfo命令
6.3.4 jmap命令
6.3.5 jhat命令
6.3.6 jstack命令
6.3.7 jstatd命令
6.3.8 hprof工具
6.4 JConsole工具
6.4.1 JConsole連接Java程序
6.4.2 Java程序概況
6.4.3 內(nèi)存監(jiān)控
6.4.4 線程監(jiān)控
6.4.5 類加載情況
6.4.6 虛擬機(jī)信息
6.4.7 MBean管理
6.4.8 使用插件
6.5 Visual VM多合一工具
6.5.1 Visual VM連接應(yīng)用程序
6.5.2 監(jiān)控應(yīng)用程序概況
6.5.3 Thread Dump和分析
6.5.4 性能分析
6.5.5 快照
6.5.6 內(nèi)存快照分析
6.5.7 MBean管理
6.5.8 TDA使用
6.5.9 BTrace介紹
6.6 Visual VM對(duì)OQL的支持
6.6.1 Visual VM的OQL基本語(yǔ)法
6.6.2 內(nèi)置heap對(duì)象
6.6.3 對(duì)象函數(shù)
6.6.4 集合/統(tǒng)計(jì)函數(shù)
6.6.5 程序化OQL
6.7 MAT內(nèi)存分析工具
6.7.1 初識(shí)MAT
6.7.2 淺堆和深堆
6.7.3 支配樹(shù)(Dominator Tree)
6.7.4 垃圾回收根
6.7.5 內(nèi)存泄露檢測(cè)
6.7.6 最大對(duì)象報(bào)告
6.7.7 查找支配者
6.7.8 線程分析
6.7.9 集合使用情況分析
6.7.10 擴(kuò)展MAT
6.8 MAT對(duì)OQL的支持
6.8.1 Select子句
6.8.2 From子句
6.8.3 Where子句
6.8.4 內(nèi)置對(duì)象與方法
6.9 JProfile簡(jiǎn)介
6.9.1 JProfile使用配置
6.9.2 內(nèi)存視圖
6.9.3 堆快照
6.9.4 CPU視圖
6.9.5 線程視圖
6.9.6 JVM統(tǒng)計(jì)信息
6.9.7 觸發(fā)器
6.10 小結(jié)
編輯推薦
一個(gè)優(yōu)秀的程序員,不僅要會(huì)編寫(xiě)程序,更要會(huì)編寫(xiě)高質(zhì)量的程序感受Java開(kāi)發(fā)中的大智慧,讓你的Java程序更優(yōu)美專注于Java應(yīng)用程序的優(yōu)化方法、技巧和思想深入剖析軟件設(shè)計(jì)層面、代碼層面、JVM虛擬機(jī)層面的優(yōu)化方法理論結(jié)合實(shí)際,使用豐富的示例幫助讀者理解理論知識(shí)
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版