java 性能 優化
優化Java代碼需要了解Java中的不同元素如何交互以及如何與運行Java的操作系統交互。 使用這五個技巧和資源開始學習如何分析和優化代碼。
在我們獲得好處之前,您可能會擔心許可問題。 Java由Oracle擁有,並受Oracle BCL許可證的約束,該許可證不是免費/開源許可證。 即便如此,Oracle Java還是許多開源項目的一部分 。 OpenJDK是Java平臺的免費軟件實現,已通過GPL v2許可。 (有關更多信息,請參見Wikipedia上的免費Java實現 。)
性能優化取決於多種因素,包括垃圾收集,虛擬機和基礎操作系統(OS)設置。 開發人員可以使用多種工具來進行分析和優化,並且可以閱讀Java工具進行源代碼優化和分析以瞭解其中的一些工具 。 如果您在使用術語和Java基礎方面遇到困難,請查看Livecoding Java類別頁面以獲取實時流 ,已歸檔的視頻和其他有用的信息。
有必要了解,沒有兩個應用程序可以具有相同的優化,並且沒有確定的路徑可以優化Java應用程序。 這都是關於使用最佳實踐並堅持正確的方式來處理性能優化方法論。 要真正處於性能優化的最頂端,作爲Java開發人員,您需要對Java虛擬機(JVM)和底層操作系統有適當的瞭解:
在明確了性能優化的基本思想及其要素之後,我們現在將重點介紹可幫助您優化Java應用程序的技巧。
由於垃圾回收的複雜性,很難找到應用程序的確切性能。 但是,如果您確實要優化應用程序,則需要相應地處理垃圾回收。 一般規則是更改GC設置並同時執行性能分析。
對結果感到滿意後,就可以停止該過程並轉向其他形式的優化。 確保除了平均交易時間外,您還要注意異常值。 當Java應用程序變慢時,異常值是真正的罪魁禍首,而且很難找到。
此外,您需要了解應用程序運行期間性能影響的影響。 每一週的速度下降可以忽略不計,而每一次數據庫事務的速度下降則可能是一項代價高昂的事情。 相應地選擇優化路徑,然後根據工作量優化應用程序。
讓我們進一步瞭解GC優化。 畢竟,這是手頭整個優化問題的關鍵。 當前,有四種Java垃圾收集器算法可供選擇。 每種算法都可以滿足不同的需求,因此您需要相應地進行選擇。 許多開發人員無法優化其應用程序,因爲他們對GC算法一無所知。
四種算法是串行收集器,並行/吞吐量收集器,CMS收集器和G1收集器。 要了解有關每個垃圾收集器及其工作方式的更多信息,請從Takipi博客中查看令人驚歎的垃圾收集器-串行,並行,CMS,G1 。 本文還討論了Java 8對GC算法的影響以及其他微小變化。
回到理解 GC算法,根據瞭解Java垃圾收集 ,併發標記和掃描GC(或「 CMS」)算法是Web服務器應用程序的最佳算法選擇。 並行GC算法非常適合具有內置可預測性的應用程序。
G1和CMS是併發操作的理想選擇,但也會引起頻繁的暫停。 選擇還取決於權衡。 例如,即使與其他GC算法相比,GC暫停時間更長,也最好選擇並行算法。
Java內存堆在滿足內存需求方面起着至關重要的作用。 總是最好從最小的堆分配開始,然後通過繼續測試來增加它。 大多數情況下,優化問題是通過增加堆大小來解決的,但是如果存在大量的GC開銷,則該解決方案將無法正常工作。
GC開銷還會使吞吐量過低,從而導致應用程序異常緩慢。 此外,更早地調整GC可以幫助您避免堆大小分配方面的問題。 首先,您可以選擇1GB到8GB之間的任何堆大小。 在選擇正確的堆大小時,也可以使用舊對象和新一代對象的概念。
最後,堆大小應取決於舊對象對新一代對象的比率,先前的GC優化和liveset(即對象的內存大小)。
核心代碼優化是優化Java應用程序的最佳方法。 如果您的應用程序未響應GC和堆優化,則最好進行體系結構更改,並專注於應用程序如何處理信息。 使用聰明的算法並照顧對象可以解決很多問題,包括碎片,堆問題和垃圾回收問題。
Java具有多種功能來處理算法性能。 如果使用StringBuilder而不是簡單的String,則性能上將不會有多少改進。 但是,還有其他方法可以在代碼級別處理優化。 讓我們在下面看看它們。
在Java 十大簡單性能優化中閱讀有關Java代碼優化的更多信息。
Java性能優化是一個很大的主題,本文顯然不會涵蓋所有內容。 如果您認爲需要在文章中添加一些內容,請不要忘了通過以下評論與觀衆分享。
翻譯自: https://opensource.com/life/16/8/5-great-tricks-java-performance-optimization
java 性能 優化