五種JVM效能最佳化技巧

banq發表於2016-09-05
最佳化Java程式碼需要理解Java中不同元素是如何互動的,以及與作業系統是如何互動的,下面五個技巧幫助你分析和最佳化程式碼。

效能最佳化依賴於許多情況,比如垃圾回收,虛擬機器和底層作業系統設定。有許多工具幫助開發者分析和最佳化,這裡是Java原始碼分析和最佳化工具。

下面是五個技巧建議:

1.微調垃圾回收機制
挖掘到你的應用真正效能是很難的,因為垃圾回收機制很複雜,如果你要最佳化應用,需要首先處理垃圾回收,通常目標是改變GC設定,同時執行調校。

一旦你比較滿意調校結果,就要停止調校,不要再試驗其他最佳化方式,確保平均處理時間符合你的大概要求。

另外你需要理解在執行期間的效能影響點,單次資料庫處理如果有減慢需要值得注意。

2.尋找正確的GC演算法
GC每個不同演算法應對不同需求,GC四種演算法是:序列收集器、並行/吞吐量收集器、CMS收集器和G1收集器。這裡是更多學習垃圾回收機制的資源,也討論了Java 8的GC演算法。

按照這篇文章,CMS(並行標記並交換GC的簡稱)是適合大多數Web應用的演算法,而並行GC是適合有內建可預測模型的應用。

G1和CMS都是併發應用的理想選擇,但是會引起頻繁暫停,需要平衡選擇。

3. Java heap
Java記憶體堆是保證記憶體需要的關鍵方式,開始是很小的記憶體堆分配,持續不斷增加,大部分最佳化問題可以透過增加堆大小解決,但是如果有GC過於頻繁,增加堆記憶體大小不一定能夠解決。

GC過載過於頻繁也會降低吞吐量,使得應用出乎意料地慢,分配堆記憶體大小能夠減輕這個問題,你可以從1GB到8GB選擇堆記憶體大小,老生代和新生代物件也需要考慮,堆大小依賴老生代到新生代的比例。

4.核心應用最佳化
調整應用架構,關注跟蹤你的應用中物件來龍去脈,有助降低記憶體碎片,堆問題和垃圾回收問題。

5.使用最佳化函式
幾種有助提升效能的函式:
(1).使用StringBuilder而不是+運算子
(2).避免使用 iterator().
(3).最大化利用stack棧
(4).避免正規表示式,使用Apache Commons Lang取代
(5).遠離遞迴迴圈,遞迴迴圈是資源密集型。

Start learning how to analyze and optimize your co

[該貼被banq於2016-09-05 19:13修改過]

相關文章