java 性能 優化_Java性能優化的5個技巧

java 性能 優化

優化Java代碼需要了解Java中的不同元素如何交互以及如何與運行Java的操作系統交互。 使用這五個技巧和資源開始學習如何分析和優化代碼。

在我們獲得好處之前,您可能會擔心許可問題。 Java由Oracle擁有,並受Oracle BCL許可證的約束,該許可證不是免費/開源許可證。 即便如此,Oracle Java還是許多開源項目的一部分 OpenJDK是Java平臺的免費軟件實現,已通過GPL v2許可。 (有關更多信息,請參見Wikipedia上的免費Java實現 。)

入門

性能優化取決於多種因素,包括垃圾收集,虛擬機和基礎操作系統(OS)設置。 開發人員可以使用多種工具來進行分析和優化,並且可以閱讀Java工具進行源代碼優化和分析以瞭解其中的一些工具 如果您在使用術語和Java基礎方面遇到困難,請查看Livecoding Java類別頁面以獲取實時流 ,已歸檔的視頻和其他有用的信息。

Java編程類別頁面

「這取決於」

有必要了解,沒有兩個應用程序可以具有相同的優化,並且沒有確定的路徑可以優化Java應用程序。 這都是關於使用最佳實踐並堅持正確的方式來處理性能優化方法論。 要真正處於性能優化的最頂端,作爲Java開發人員,您需要對Java虛擬機(JVM)和底層操作系統有適當的瞭解:

  • JVM和底層操作系統: Java虛擬機是任何Java應用程序的宿主。 閱讀JVM內部指南,以瞭解有關JVM內部和操作系統差異的更多信息。
  • JVM分發模型: Java分發模型爲您的應用程序處理多個JVM實例。 分發模型可獲取更多可用資源,從而提高了應用程序性能。 您可以採用兩種方法前進。 第一種方法是在單個服務器上以2GB或8GB的堆大小運行多個JVM。 第二種方法是在多個服務器上運行一個JVM。 選擇正確的方法取決於多種因素,包括可用性和響應能力。
  • JVM體系結構:選擇正確的JVM體系結構對於性能很重要。 您可以使用64位JVM機器或32位JVM機器。 通常,32位JVM的性能要優於64位JVM。 選擇64位JVM的唯一原因是,如果您要求堆大小大於3GB。

在明確了性能優化的基本思想及其要素之後,我們現在將重點介紹可幫助您優化Java應用程序的技巧。

1.調整垃圾回收(GC)

由於垃圾回收的複雜性,很難找到應用程序的確切性能。 但是,如果您確實要優化應用程序,則需要相應地處理垃圾回收。 一般規則是更改GC設置並同時執行性能分析。

對結果感到滿意後,就可以停止該過程並轉向其他形式的優化。 確保除了平均交易時間外,您還要注意異常值。 當Java應用程序變慢時,異常值是真正的罪魁禍首,而且很難找到。

此外,您需要了解應用程序運行期間性能影響的影響。 每一週的速度下降可以忽略不計,而每一次數據庫事務的速度下降則可能是一項代價高昂的事情。 相應地選擇優化路徑,然後根據工作量優化應用程序。

2.獲得適合您的GC算法

讓我們進一步瞭解GC優化。 畢竟,這是手頭整個優化問題的關鍵。 當前,有四種Java垃圾收集器算法可供選擇。 每種算法都可以滿足不同的需求,因此您需要相應地進行選擇。 許多開發人員無法優化其應用程序,因爲他們對GC算法一無所知。

四種算法是串行收集器,並行/吞吐量收集器,CMS收集器和G1收集器。 要了解有關每個垃圾收集器及其工作方式的更多信息,請從Takipi博客中查看令人驚歎的垃圾收集器-串行,並行,CMS,G1 本文還討論了Java 8對GC算法的影響以及其他微小變化。

回到理解 GC算法,根據瞭解Java垃圾收集 ,併發標記和掃描GC(或「 CMS」)算法是Web服務器應用程序的最佳算法選擇。 並行GC算法非常適合具有內置可預測性的應用程序。

G1和CMS是併發操作的理想選擇,但也會引起頻繁的暫停。 選擇還取決於權衡。 例如,即使與其他GC算法相比,GC暫停時間更長,也最好選擇並行算法。

3. Java堆

Java內存堆在滿足內存需求方面起着至關重要的作用。 總是最好從最小的堆分配開始,然後通過繼續測試來增加它。 大多數情況下,優化問題是通過增加堆大小來解決的,但是如果存在大量的GC開銷,則該解決方案將無法正常工作。

GC開銷還會使吞吐量過低,從而導致應用程序異常緩慢。 此外,更早地調整GC可以幫助您避免堆大小分配方面的問題。 首先,您可以選擇1GB到8GB之間的任何堆大小。 在選擇正確的堆大小時,也可以使用舊對象和新一代對象的概念。

最後,堆大小應取決於舊對象對新一代對象的比率,先前的GC優化和liveset(即對象的內存大小)。

4.核心應用程序優化

核心代碼優化是優化Java應用程序的最佳方法。 如果您的應用程序未響應GC和堆優化,則最好進行體系結構更改,並專注於應用程序如何處理信息。 使用聰明的算法並照顧對象可以解決很多問題,包括碎片,堆問題和垃圾回收問題。

5.使用最佳功能

Java具有多種功能來處理算法性能。 如果使用StringBuilder而不是簡單的String,則性能上將不會有多少改進。 但是,還有其他方法可以在代碼級別處理優化。 讓我們在下面看看它們。

  • 使用StringBuilder代替+運算符。
  • 避免使用iterator()。
  • 充分利用堆棧。
  • 避免使用正則表達式,而使用Apache Commons Lang
  • 遠離遞歸。 遞歸非常耗費資源!

在Java 十大簡單性能優化中閱讀有關Java代碼優化的更多信息。

結論

Java性能優化是一個很大的主題,本文顯然不會涵蓋所有內容。 如果您認爲需要在文章中添加一些內容,請不要忘了通過以下評論與觀衆分享。

翻譯自: https://opensource.com/life/16/8/5-great-tricks-java-performance-optimization

java 性能 優化