轉(zhuǎn)帖|行業(yè)資訊|編輯:蔣永|2016-12-01 11:53:40.000|閱讀 225 次
概述:要對你的 java 代碼進行優(yōu)化,需要理解 java 不同要素之間的相互作用,以及它是如何與其運行時的操作系統(tǒng)進行交互的。下面分享這五個技巧和資源,學習如何分析和優(yōu)化你的代碼吧。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
要對你的 java 代碼進行優(yōu)化,需要理解 java 不同要素之間的相互作用,以及它是如何與其運行時的操作系統(tǒng)進行交互的。使用下面這五個技巧和資源,開始學習如何分析和優(yōu)化你的代碼吧。
在我們開始之前, 你也許會擔心許可的問題. Java 為 Oracle 公司所有,遵循 Oracle 的 BCL 許可,該許可證不是一個免費/開源許可證。即便如此, 仍然有許多開源項目由 Oracle 公司的 Java 開發(fā)。 OpenJDK 是 java 平臺自由軟件的實現(xiàn),遵循 GPL v2 許可。 (更多信息請參見維基百科 。)
性能優(yōu)化取決于多個因素,包括垃圾收集、虛擬機和底層操作系統(tǒng)(OS)設置。有多個工具可供開發(fā)人員進行分析和優(yōu)化時使用,你可以通過閱讀 來學習和使用它們。如果你正苦苦掙扎于術(shù)語和 Java 的原理,可以先去查看 ,上面有直播,存檔的視頻,以及一些其他有用的信息。
必須要明白的是,沒有兩個應用程序可以使用相同的優(yōu)化方式,也沒有完美的優(yōu)化 java 應用程序的參考路徑。使用最佳實踐并且堅持采用適當?shù)姆绞教幚硇阅軆?yōu)化。想要達到真正最高的性能優(yōu)化,你作為一個 Java 開發(fā)人員,需要對 Java 虛擬機(JVM)和底層操作系統(tǒng)有正確的理解:
清楚了性能優(yōu)化和其要素,現(xiàn)在我們可以專注于那些可以優(yōu)化你的Java應用的技巧.
由于垃圾收集的復雜性,很難發(fā)現(xiàn)你的應用的準確性能.不過,如果你真的想優(yōu)化你的應用,你應該相應地處理垃圾收集.通用的準則是調(diào)整GC設置并同時執(zhí)行性能分析.
一旦你對結(jié)果感到滿意,你可以停止該過程并尋求其他優(yōu)化方式.確保除了在平均事務處理時間之外,你還留心了異常值.這些異常值是造成Java應用緩慢的真正的罪魁禍首并且很難找到.
此外,你要明白應用運行期間性能下降的效應.在每單個cpu時鐘內(nèi)的緩慢操作是可以忽略的,但在每單個數(shù)據(jù)庫事務中的緩慢操作則是非常昂貴的消耗.但是你應該根據(jù)性能短板選擇你的優(yōu)化策略,并應該根據(jù)工作負載來優(yōu)化應用.
讓我們更深入地探討GC優(yōu)化.畢竟,GC優(yōu)化是要處理的整個優(yōu)化問題中最基本的.目前,Java中有四種供你選擇的垃圾收集算法.每種算法滿足不同的需求,因此你要選擇(適合你的需求的).很多開發(fā)人員正是因為不了解GC算法而未能優(yōu)化他們的應用.
這四個算法分別是串行回收器,并行/吞吐量回收器,CMS回收器和G1回收器.想要了解更多關(guān)于每種垃圾收集器的信息及它們是如何工作的,請查看這篇來自Takipi博客的非常棒的文章. 這篇文章同時還討論了Java8對GC算法的影響及其他細節(jié)上的改變.
讓我們再回到GC算法上,根據(jù)這篇文章所述,并發(fā)標記和清除GC(即"CMS")算法才是適合網(wǎng)絡服務端應用的最佳算法.并行GC算法適合那些內(nèi)部可預測的應用.
G1和CMS是并發(fā)操作的理想選擇,但仍然會引起(應用)頻繁停頓.實際的選擇取決于你如何取舍.舉例來說,盡管選擇并行算法會帶來更長的GC停頓時間,但相較于其他GC算法,選擇并行算法仍是一個好主意.
Java內(nèi)存堆在迎合內(nèi)存需求方面擔任了至關(guān)重要角色.通常更好的做法是初始時分配最小的堆,然后通過持續(xù)的測試不斷增加它的大小.大多數(shù)時候優(yōu)化問題都可以通過增加堆的大小解決,但如果存在大量的GC開銷,則該解決方案不起作用.
GC開銷還會使吞吐量急劇下降,進而使得應用難以形容的慢.此外,及早調(diào)整GC可以幫助你避免堆大小分配的問題.開始的時候,你可以選擇任何1GB到8GB的堆大小.當你選擇正確的堆大小,老生代和新生代對象的概念也就不需要了.
總而言之,堆大小應該取決于老生代和新生代對象的比率,之前的GC優(yōu)化和對象集合(即所有對象占用的內(nèi)存大小).
關(guān)鍵代碼優(yōu)化是優(yōu)化你的Java應用最好的方式.如果你的應用對GC和堆優(yōu)化沒有反應,那么最好是做架構(gòu)改進并關(guān)注于你的應用是如何處理信息的.使用聰明的算法并管理好對象就能解決大量的問題,包括內(nèi)存碎片,堆大小問題和垃圾收集的問題.
Java提供了多個函數(shù)來提升算法效率.如果你使用StringBuilder代替簡單的String,你可以得到微乎其微的性能提升.不過,我們還有其他方式在代碼層面進行優(yōu)化.讓我們看看下面這些優(yōu)化方法.
更多關(guān)于代碼的優(yōu)化
java的性能優(yōu)化可是一個大課題, 藉著這片文章拋磚引玉。如果您認為文章還需要添加補充,別忘了在下面的評論中分享您的觀點。
本文來自()
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn