TOP
Java程序性能優化:讓你的Java程序更快、更穩定(簡體書)
滿額折

Java程序性能優化:讓你的Java程序更快、更穩定(簡體書)

商品資訊

人民幣定價:59 元
定價
:NT$ 354 元
優惠價
87308
海外經銷商無庫存,到貨日平均30天至45天
下單可得紅利積點 :9 點
商品簡介
作者簡介
名人/編輯推薦
目次
書摘/試閱

商品簡介

Java是目前應用最為廣泛的軟件開發平臺,學習針對Java程序的優化方法有重要的現實意義。《Java程序性能優化:讓你的Java程序更快、更穩定》以Java性能調優為主線,系統地闡述了與Java性能優化相關的知識與技巧。《Java程序性能優化:讓你的Java程序更快、更穩定》共6章,先後從軟件設計、軟件編碼、JVM調優以及程序故障排斥等方面介紹針對Java程序的優化方法。第1章介紹性能的基本概念、定律、系統調優的過程和注意事項。第2章從設計層面介紹與性能相關的設計模式、組件。第3章從代碼層面介紹如何編寫高性能的Java程序。第4章介紹了並行開發和如何通過多線程提高系統性能。第5章立足於JVM虛擬機層面,介紹如何通過設置合理的JVM參數提升Java程序的性能。第6章為工具篇,介紹了獲取和監控程序或系統性能指標的各種工具,包括相關的故障排查工具。本書適合所有Java程序員、軟件設計師、架構師以及軟件開發愛好者,對於有一定經驗的Java工程師,本書更能幫助他突破技術瓶頸,深入Java內核開發!.

作者簡介

葛一鳴,畢業於浙江工業大學,獲得了計算機軟件與理論專業碩士學位。取得了國家認證系統分析師職稱、OCP(Oracle數據庫認證專家)。現就職于UT斯達康通訊有限公司,從事Java軟件開發。有多年的軟件開發經驗,參與開發過多個軟件項目。熟悉Java、PHP、MySQL、Oracle等開發語言和數據庫,對Java軟件開發、性能優化、分布式軟件有著濃厚的興趣和深入的研究。在校期間曾經發表過多篇技術論文。.

名人/編輯推薦

《Java程序性能優化:讓你的Java程序更快、更穩定》適合所有Java程序員、軟件設計師、架構師以及軟件開發愛好者,對于有一定經驗的Java工程師,《Java程序性能優化:讓你的Java程序更快、更穩定》更能幫助突破技術瓶頸,深入Java內核開發!一個優秀的程序員,不僅要會編寫程序,更要會編寫高質量的程序感受Java開發中的大智慧,讓你的Java程序更優美。專注于Java應用程序的優化方法、技巧和思想,深入剖析軟件設計層面、代碼層面、JVM虛擬機層面的優化方法。

目次

第1章 Java性能調優概述1.1 性能概述1.1.1 看懂程序的性能1.1.2 性能的參考指標1.1.3 木桶原理與性能瓶頸1.1.4 Amdahl定律1.2 性能調優的層次1.2.1 設計調優1.2.2 代碼調優1.2.3 JVM調優1.2.4 數據庫調優1.2.5 操作系統調優1.3 基本調優策略和手段1.3.1 優化的一般步驟1.3.2 系統優化注意事項1.4 小結第2章 設計優化2.1 善用設計模式2.1.1 單例模式2.1.2 代理模式2.1.3 享元模式2.1.4 裝飾者模式2.1.5 觀察者模式2.1.6 Value Object模式2.1.7 業務代理模式2.2 常用優化組件和方法2.2.1 緩衝(Buffer)2.2.2 緩存(Cache)2.2.3 對象複用——池2.2.4 並行替代串行2.2.5 負載均衡2.2.6 時間換空間2.2.7 空間換時間2.3 小結第3章 Java程序優化3.1 字符串優化處理3.1.1 String對象及其特點3.1.2 subString()方法的內存洩漏3.1.3 字符串分割和查找3.1.4 StringBuffer和StringBuilder3.2 核心數據結構3.2.1 List接口3.2.2 Map接口3.2.3 Set接口3.2.4 優化集合訪問代碼3.2.5 RandomAccess接口3.3 使用NIO提升性能3.3.1 NIO的Buffer類族和Channel3.3.2 Buffer的基本原理3.3.3 Buffer的相關操作3.3.4 MappedByteBuffer性能評估3.3.5 直接內存訪問3.4 引用類型3.4.1 強引用3.4.2 軟引用3.4.3 弱引用3.4.4 虛引用3.4.5 WeakHashMap類及其實現3.5 有助於改善性能的技巧3.5.1 慎用異常3.5.2 使用局部變量3.5.3 位運算代替乘除法3.5.4 替換switch3.5.5 一維數組代替二維數組3.5.6 提取表達式3.5.7 展開循環3.5.8 布爾運算代替位運算3.5.9 使用arrayCopy ()3.5.10 使用Buffer進行I/O操作3.5.11 使用clone()代替new3.5.12 靜態方法替代實例方法3.6 小結第4章 並行程序開發及優化4.1 並行程序設計模式4.1.1 Future模式4.1.2 Master-Worker模式4.1.3 Guarded Suspension模式4.1.4 不變模式4.1.5 生產者-消費者模式4.2 JDK多任務執行框架4.2.1 無限制線程的缺陷4.2.2 簡單的線程池實現4.2.3 Executor框架4.2.4 自定義線程池4.2.5 優化線程池大小4.2.6 擴展ThreadPoolExecutor4.3 JDK併發數據結構4.3.1 併發List4.3.2 併發Set4.3.3 併發Map4.3.4 併發Queue4.3.5 併發Deque4.4 併發控制方法4.4.1 Java內存模型與volatile4.4.2 同步關鍵字synchronized4.4.3 ReentrantLock重入鎖4.4.4 ReadWriteLock讀寫鎖4.4.5 Condition對象4.4.6 Semaphore信號量4.4.7 ThreadLocal線程局部變量4.5 鎖的性能和優化4.5.1 線程的開銷4.5.2 避免死鎖4.5.3 減小鎖持有時間4.5.4 減小鎖粒度4.5.5 讀寫分離鎖來替換獨佔鎖4.5.6 鎖分離4.5.7 重入鎖ReentrantLock和內部鎖synchronized4.5.8 鎖粗化(Lock Coarsening)4.5.9 自旋鎖(Spinning Lock)4.5.10 鎖消除(Lock Elimination)4.5.11 鎖偏向(Biased Lock)4.6 無鎖的並行計算4.6.1 非阻塞的同步/無鎖4.6.2 原子操作4.6.3 Amino框架介紹4.6.4 Amino集合4.6.5 Amino樹4.6.6 Amino圖4.6.7 Amino簡單調度模式4.7 協程4.7.1 協程的概念4.7.2 Kilim框架簡介4.7.3 Task及其狀態4.7.4 Fiber及其狀態4.7.5 Kilim開發環境配置4.7.6 Kilim之Hello World4.7.7 多任務通信4.7.8 Kilim實例及性能評估4.8 小結第5章 JVM調優5.1 Java虛擬機內存模型5.1.1 程序計數器5.1.2 Java虛擬機棧5.1.3 本地方法棧5.1.4 Java堆5.1.5 方法區5.2 JVM內存分配參數5.2.1 設置最大堆內存5.2.2 設置最小堆內存5.2.3 設置新生代5.2.4 設置持久代5.2.5 設置線程桟5.2.6 堆的比例分配5.2.7 堆分配參數總結5.3 垃圾收集基礎5.3.1 垃圾收集的作用5.3.2 垃圾回收算法與思想5.3.3 垃圾收集器的類型5.3.4 評價GC策略的指標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 收集器對系統性能的影響5.3.14 GC相關參數總結5.4 常用調優案例和方法5.4.1 將新對象預留在新生代5.4.2 大對象進入老年代5.4.3 設置對象進入老年代的年齡5.4.4 穩定與震盪的堆大小5.4.5 吞吐量優先案例5.4.6 使用大頁案例5.4.7 降低停頓案例5.5 實用JVM參數5.5.1 JIT編譯參數5.5.2 堆快照(堆Dump)5.5.3 錯誤處理5.5.4 取得GC信息5.5.5 類和對象跟蹤5.5.6 控制GC5.5.7 選擇類校驗器5.5.8 Solaris下線程控制5.5.9 使用大頁5.5.10 壓縮指針5.6 實戰JVM調優5.6.1 Tomcat簡介與啟動加速5.6.2 Web應用程序介紹5.6.3 JMeter介紹與使用5.6.4 調優前Web應用運行狀況5.6.5 調優過程5.7 總結第6章 Java性能調優工具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 任務管理器6.2.2 perfmon性能監控工具6.2.3 Process Explorer6.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.7jstatd命令6.3.8 hprof工具6.4 JConsole工具6.4.1 JConsole連接Java程序6.4.2 Java程序概況6.4.3 內存監控6.4.4 線程監控6.4.5 類加載情況6.4.6 虛擬機信息6.4.7 MBean管理6.4.8 使用插件6.5 Visual VM多合一工具6.5.1 Visual VM連接應用程序6.5.2 監控應用程序概況6.5.3 Thread Dump和分析6.5.4 性能分析6.5.5 快照6.5.6 內存快照分析6.5.7 MBean管理6.5.8 TDA使用6.5.9 BTrace介紹6.6 Visual VM對OQL的支持6.6.1 Visual VM的OQL基本語法6.6.2 內置heap對象6.6.3 對象函數6.6.4 集合/統計函數6.6.5 程序化OQL6.7 MAT內存分析工具6.7.1 初識MAT6.7.2 淺堆和深堆6.7.3 支配樹(Dominator Tree)6.7.4 垃圾回收根6.7.5 內存洩露檢測6.7.6 最大對象報告6.7.7 查找支配者6.7.8 線程分析6.7.9 集合使用情況分析6.7.10 擴展MAT6.8 MAT對OQL的支持6.8.1 Select子句6.8.2 From子句6.8.3 Where子句6.8.4 內置對象與方法6.9 JProfile簡介6.9.1 JProfile使用配置6.9.2 內存視圖6.9.3 堆快照6.9.4 CPU視圖6.9.5 線程視圖6.9.6 JVM統計信息6.9.7 觸發器6.10 小結.

書摘/試閱



當使用有界的任務隊列時,若有新的任務需要執行,如果線程池的實際線程數小于corePoolSize,則會優先創建新的線程,若大于corePoolSize,則會將新任務加入等待隊列。若等待隊列已滿,無法加入,則在總線程數不大于maximumPoolSize的前提下,創建新的進程執行任務。若大于maximumPoolSize,則執行拒絕策略。可見,有界隊列僅當任務隊列裝滿時,才可能將線程數提升到corePoolSize以上,換言之,除非系統非常繁忙,否則確保核心線程數維持在corePoolSize。
口無界的任務隊列:無界任務隊列可以通過LinkedBlockingQueue類實現。與有界隊列相比,除非系統資源耗盡,否則無界的任務隊列不存在任務入隊失敗的情況。當有新的任務到來,系統的線程數小于corePoolSize時,線程池會生成新的線程執行任務,但當系統的線程數達到corePoolSize后,就不會繼續增加。若后續仍有新的任務加入,而又沒有空閑的線程資源,則任務直接進入隊列等待。若任務創建和處理的速度差異很大,無界隊列會保持快速增長,直到耗盡系統內存。
優先任務隊列:優先任務隊列是帶有執行優先級的隊列,它通過PriorityBlocking—Queue實現。可以控制任務的執行先后順序,是一個特殊的無界隊列。無論是有界隊列ArrayBlockingQueue,還是未指定大小的無界隊列LinkedBlockingQueue都是按照先進先出算法處理任務的。而PriorityBlockingQueue則可以根據任務自身的優先級順序先后執行,在確保系統性能的同時,也能有很好的質量保證(總是確保高優先級的任務先執行)。
回顧newFixedThreadPool()方法的實現,它返回了一個corePoolSize和maximum—PoolSize大小一樣的、并且使用了LinkedBlockingQueue任務隊列的線程池。因為對于固定大小的線程池而言,不存在線程數量的動態變化,因此corePoolSize和maximumPoolSize可以相等。同時,它使用無界隊列存放無法立即執行的任務。當任務提交非常頻繁的時候,該隊列可能迅速膨脹,從而耗盡系統資源。
newSingleThreadExecutor()返回的單線程線程池,是newFixedThreadPool()方法的一種退化,只是簡單地將線程池線程數量設置為1。

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 308
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區