本文目錄一覽:
《Java性能優化權威指南豆瓣》pdf下載在線閱讀全文,求百度網盤雲資源
《Java性能優化權威指南豆瓣》百度網盤pdf最新全集下載:
鏈接:
?pwd=vosf 提取碼:vosf
簡介:《Java性能優化權威指南》是Java應用性能調優的聖經,內容通俗易懂,介紹了大量的監控和測量工具,涉及各種硬體架構和操作系統。涵蓋了如何構建實驗、解釋結果以及如何採取行動等技巧。
如何優化java虛擬機,提高性能
關於性能調優:
1 需要一個性能探測器,找到調用最頻繁的代碼段,優化這部分代碼(優化演算法)
2 往往1%的代碼運行時間佔99%。所以優化這些代碼就能事半功倍。
3 最好是能看懂編譯後的代碼,這樣分析最徹底。
Java的性能分析使用JProfiler
堆棧分析使用的Jstack
Java性能調優 SSH框架優化以適應特定的項目
一、JVM調優
1 各種垃圾回收演算法及其優劣;
2 針對不同應用類型如何選擇JVM參數
3 常用調優工具的使用(jps/jstat/jmap/jstack/jinfo/jhat)
4 調優案例分析(如何選擇不同內存塊的大小,如何選擇不同的演算法來提升性能、響應時間)
二、Java應用中CPU佔用率、使用情況分析,線程死鎖等鎖
系統性能瓶頸的分析定位
1 JStack的深度使用
2 各種Linux監控命令的配合使用(top,vmstat,iostat,sar 不要輕信自己能完全掌控這些命令)、分析
(前一陣Java漏洞通過製造Hash衝突來佔盡CPU資源就可以通過top命令快速定位到,你肯定沒有這麼用過)
3 JProfiler的詳細使用
三、Java內存溢出分析
1 用EMA來分析內存佔用情況
2 通過案例分析來定位內存泄漏
互聯網中的性能主要是兩個方面:
1 吞吐量,就是系統支持的訪問量。
2 延遲,就是一個請求提交後,相應的時間。
一般硬體不變的情況下,兩方面各自優化到極限後,相互會制約,也就是吞吐量增強的話比如需要延遲加大,反之亦然。
Java代碼如何優化?從哪些方面入手?分析
1)盡量指定類、方法的final修飾符。帶有final修飾符的類是不可派生的,Java編譯器會尋找機會內聯所有的final方法,內聯對於提升Java運行效率作用重大,此舉能夠使性能平均提高50%。
2)盡量重用對象。由於Java虛擬機不僅要花時間生成對象,以後可能還需要花時間對這些對象進行垃圾回收和處理,因此生成過多的對象將會給程序的性能帶來很大的影響。
3)儘可能使用局部變數。調用方法時傳遞的參數以及在調用中創建的臨時變數都保存在棧中速度較快,其他變數,如靜態變數、實例變數等,都在堆中創建速度較慢。
4)慎用異常。異常對性能不利,只要有異常被拋出,Java虛擬機就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。異常只能用於錯誤處理,不應該用來控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以極大地提高性能,因為在計算機底層,對位的操作是最方便、最快的,但是移位操作雖然快,可能會使代碼不太好理解,因此最好加上相應的注釋。
6)盡量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用 Hashtable、Vector、StringBuffer,後三者由於使用同步機制而導致了性能開銷。
盡量在合適的場合使用單例。使用單例可以減輕載入的負擔、縮短載入的時間、提高載入的效率,但並不是所有地方都適用於單例。
tomcat 性能調優
java性能優化原則:代碼運算性能 內存回收 應用配置(影響java程序注意原因是垃圾回收)
代碼層優化:避免過多的循環嵌套 調用和複雜邏輯
Tomcat調優主要內容
1.增加最大連接數
2.調整工作模式
3.啟用gzip壓縮
4.調整JVM內存大小
5.作為web伺服器時 與Apache整合或Nginx
6.合理選擇垃圾回收演算法
7.盡量使用較新版的JDK
生產環境實例
connector p=””
maxThreads=”1000″
minSpareThreads=”100″
maxSpareThreads=”200″
acceptCount=”900″
disableUploadTimeout=”true”
connectionTimeout=”20000″
URIEncoding=”UTF-8″
enableLookups=”false”
redirectPort=”8443″
compression=”on”
compressionMinSize=”1024″
compressableMimeType=”text/html,text/xml,text/css,text/javascript”/
參數說明:
org.apache.coyote.http11.Http11NioProtocol:調整工作模式為Nio
maxThreads:最大線程數,默認150。增大值避免隊列請求過多,導致響應緩慢。
minSpareThreads:最小空閑線程數
maxSpareThreads:最大空閑線程數,如果超過這個值,會關閉無用的線程。
acceptCount:當處理請求超過此值時,將後來請求放到隊列中等待。
disableUploadTimeout:禁用上傳超時時間
connectionTimeout:連接超時,單位毫秒,0代表不限制
URIEncoding:URI地址編碼使用UTF-8
enableLookups:關閉dns解析,提高響應時間
compression:啟用壓縮功能
compressionMinSize:最小壓縮大小,單位Byte
compressableMimeType:壓縮的文件類型
Tomcat的三種工作模式: Bio、Nio和Apr 工作原理分別為
Bio(Blocking I/O):默認工作模式 阻塞式I/O操作 沒有任何優化技術處理 性能比較低
Nio(New I/O or Non-Blocking):非阻塞式I/O操作 有BIO更好的並發處理性能
Apr(apache portable runtime,apache可移植運行庫):首選工作模式 主要為上層的應用程序提供一個可以跨越多操作系統平台使用的底層支持介面庫
Tomcat利用基於APR庫Tomcat-native來實現操作系統級別控制 提供一種優化技術和非阻塞式I/O操作 大大提高並發處理能力
但是需要安裝APR和Tomcat-native庫
Java性能問題主要來自於jvm jvm GC也比較複雜
1、jvm內存劃分為年輕代(Young Generation)、年老代 Old Generation)、永久代(Permanent Generation)
2、年輕代又分為Eden和Survivor區。Survivor區由FromSpace和ToSpace組成。Eden區佔大容量,Survivor兩個區佔小容量,默認8:2
3、堆內存Heap=年輕代+年老代 非堆內存=永久代
4、堆內存用途:存放的是對象 垃圾收集器就是收集這些對象的 然後根據GC演算法回收
5、非堆內存用途:JVM本身使用 存放一些類型 方法 常量 屬性等
6、年輕代:新生成的對象首選放到年輕代的E區中 當E區滿時 經過GC後 還存活的對象被複制到Survivor區的FromSpace中 如果survivor區滿
會再被複制到survivor區的ToSpace區 如果還有存活的對象 會再被複制到老年代
7、老年代:在年輕代中經過GC後還存活的對象會被複制到老年代中 當老年代空間不足時 jvm會對老年代進行完全的垃圾回收(Full GC)
如果GC後 還是無法存放從survivor區複製過來的對象 就會出現OOM
8、永久代:也稱為方法區 存放靜態類型數據 比如類 方法 屬性等
垃圾回收演算法
1、標記 清除
2、複製
3、標記 整理
垃圾收集器
單線程/多線程收集器
GMS收集器
JAVA_OPTS=”-server -Xms1024m -Xmx1536m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParallelGCThreads=8 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -Xloggc:../logs/gc.log”
參數 描述
-Xms 堆內存初始大小 單位M、G
-Xmx 堆內存最大允許大小 一般不要大於物理內存的80%
-XX:PermSize 非堆內存初始大小 一般應用設置初始化200M 最大1024M就夠了
-XX:MaxPermSize 非堆內存最大允許值
-XX:+UseParallelGCThreads=8 並行收集器線程數 同時有多少個線程進行垃圾回收 一般與CPU數量相等
-XX:+UseParalle101dGC 指定老年代為並行收集
-XX:+UseConcMarkSweepGC CSM收集器
-XX:+UseCMSCCompactAtFullCollection 開啟內存空間壓縮和整理 防止過多內存碎片
-XX:CMSFullGCsBeforeCompaction=0 表示多少次Full GC後開始壓縮和整理 0表示每次Full GC後立即執行壓縮和整理
-XX:CMSInitiatingOccupancyFracetion=80% 表示老年代內存空間使用80%時開始執行CMS收集 防止過多的Full GC
注意:不是jvm內存設置越大越好 具體還是根據項目對象實際占內存大小而定 可以通過java自帶的分析工具來查看
如果設置過大 會增加回收實際 從而增加暫停應用時間
gzip壓縮作用:節省伺服器流量和提高網站訪問速度 客戶端請求伺服器資源後 伺服器將資源文件壓縮 再返回給客戶端 有客戶端的瀏覽器負責壓縮並瀏覽
Apache和Tomcat結合
由於Tomcat處理靜態文件能力遠遠不足Apache 所有用Apache處理靜態文件 Tomcat負責處理jsp
session會話的保持
TomcatSessionID持久化三種方法
session粘性:通過瀏覽器cookie綁定sessionID 通過sticky模式將同一session請求分片到同一Tomcat上
session複製:tomcat通過廣播形式將session同步到其它Tomcat節點 並且Linux下要手動開啟開放廣播地址 不宜後端節點過多
session保持資料庫(memcache redis):將sessionID保存在共享的資料庫中
OOM異常的幾個原因
老年代內存不足:java.lang.OutOfMemoryError:Javaheapspace
永久代內存不足:java.lang.OutOfMemoryError:PermGenspace
代碼bug 佔用內存無法及時回收
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/181687.html