Java性能優化的五大技巧
要對你的 java 代碼進行優化,需要理解 java 不同要素之間的相互作用,以及它是如何與其運行時的操作系統進行交互的。使用下面這五個技巧和資源,開始學習如何分析和優化你的代碼吧。
在我們開始之前, 你也許會擔心許可的問題. Java 爲 Oracle 公司所有,遵循 Oracle 的 BCL 許可,該許可證不是一個免費/開源許可證。即便如此, 仍然有許多開源項目由 Oracle 公司的 Java 開發。 OpenJDK 是 java 平臺自由軟件的實現,遵循 GPL v2 許可。 (更多信息請參見維基百科 Free Java implementations。)
讓我們開始吧
性能優化取決於多個因素,包括垃圾收集、虛擬機和底層操作系統(OS)設置。有多個工具可供開發人員進行分析和優化時使用,你可以通過閱讀 Java Tools for Source Code Optimization and Analysis 來學習和使用它們。如果你正苦苦掙扎於術語和 Java 的原理,可以先去查看 Livecoding Java category page,上面有直播,存檔的視頻,以及一些其他有用的信息。
“視情況而定”
必須要明白的是,沒有兩個應用程序可以使用相同的優化方式,也沒有完美的優化 java 應用程序的參考路徑。使用最佳實踐並且堅持採用適當的方式處理性能優化。想要達到真正最高的性能優化,你作爲一個 Java 開發人員,需要對 Java 虛擬機(JVM)和底層操作系統有正確的理解:
JVM 和底層操作系統:Java 虛擬機是任何 Java 程序的家。閱讀 JVM internals guide 瞭解更多有關於 JVM 內部和操作系統差異的內容。
JVM 分佈模型:Java 分佈模型爲您的應用程序處理多個JVM實例。分佈模型提高了應用程序的性能,因爲它獲得更多的資源來工作。你可以用兩種方法繼續優化。第一種方法是在一個堆大小爲2GB或8GB的單服務器運行多個 JVM。第二種方法是在多個服務器上運行單個 JVM。正確方法的選擇取決於多個因素,包括可用性和響應性。
JVM 體系結構:選擇正確的 JVM 體系結構對於性能來說是很重要的。你可以選擇 64 位或者 32 位的 JVM 機器。 一般來說,32 位 JVM 的性能比它對應的 64 位 JVM 要好。 只有當你需要的堆大小大於 3 GB 時,才選擇 64 位的 JVM。
清楚了性能優化和其要素,現在我們可以專注於那些可以優化你的Java應用的技巧.
1. 調整垃圾收集(GC)
由於垃圾收集的複雜性,很難發現你的應用的準確性能.不過,如果你真的想優化你的應用,你應該相應地處理垃圾收集.通用的準則是調整GC設置並同時執行性能分析.
一旦你對結果感到滿意,你可以停止該過程並尋求其他優化方式.確保除了在平均事務處理時間之外,你還留心了異常值.這些異常值是造成Java應用緩慢的真正的罪魁禍首並且很難找到.
此外,你要明白應用運行期間性能下降的效應.在每單個cpu時鐘內的緩慢操作是可以忽略的,但在每單個數據庫事務中的緩慢操作則是非常昂貴的消耗.但是你應該根據性能短板選擇你的優化策略,並應該根據工作負載來優化應用.
2. 正確地選擇適合你的GC算法
讓我們更深入地探討GC優化.畢竟,GC優化是要處理的整個優化問題中最基本的.目前,Java中有四種供你選擇的垃圾收集算法.每種算法滿足不同的需求,因此你要選擇(適合你的需求的).很多開發人員正是因爲不瞭解GC算法而未能優化他們的應用.
這四個算法分別是串行回收器,並行/吞吐量回收器,CMS回收器和G1回收器.想要了解更多關於每種垃圾收集器的信息及它們是如何工作的,請查看這篇來自Takipi博客的非常棒的文章Garbage Collectors—Serial vs. Parallel vs. CMS vs. G1. 這篇文章同時還討論了Java8對GC算法的影響及其他細節上的改變.
讓我們再回到GC算法上,根據Understanding Java Garbage Collection這篇文章所述,併發標記和清除GC(即"CMS")算法纔是適合網絡服務端應用的最佳算法.並行GC算法適合那些內部可預測的應用.
G1和CMS是併發操作的.理想選擇,但仍然會引起(應用)頻繁停頓.實際的選擇取決於你如何取捨.舉例來說,儘管選擇並行算法會帶來更長的GC停頓時間,但相較於其他GC算法,選擇並行算法仍是一個好主意.
堆
Java內存堆在迎合內存需求方面擔任了至關重要角色.通常更好的做法是初始時分配最小的堆,然後通過持續的測試不斷增加它的大小.大多數時候優化問題都可以通過增加堆的大小解決,但如果存在大量的GC開銷,則該解決方案不起作用.
GC開銷還會使吞吐量急劇下降,進而使得應用難以形容的慢.此外,及早調整GC可以幫助你避免堆大小分配的問題.開始的時候,你可以選擇任何1GB到8GB的堆大小.當你選擇正確的堆大小,老生代和新生代對象的概念也就不需要了.
總而言之,堆大小應該取決於老生代和新生代對象的比率,之前的GC優化和對象集合(即所有對象佔用的內存大小).
4. 關鍵應用優化
關鍵代碼優化是優化你的Java應用最好的方式.如果你的應用對GC和堆優化沒有反應,那麼最好是做架構改進並關注於你的應用是如何處理信息的.使用聰明的算法並管理好對象就能解決大量的問題,包括內存碎片,堆大小問題和垃圾收集的問題.
5.使用最優的函數
Java提供了多個函數來提升算法效率.如果你使用StringBuilder代替簡單的String,你可以得到微乎其微的性能提升.不過,我們還有其他方式在代碼層面進行優化.讓我們看看下面這些優化方法.
使用StringBuilder代替+操作符.
避免使用iterator().
多使用棧帶來的好處.
避免使用正則表達式,使用Apache Commons Lang作爲代替.
遠離遞歸.遞歸會佔用大量資源!
.查看更多關於代碼的優化Top 10 Easy Performance. Optimisations in Java.
結論
java的性能優化可是一個大課題, 藉着這片文章拋磚引玉。如果您認爲文章還需要添加補充,別忘了在下面的評論中分享您的觀點。
相關文章
-
Java 性能優化的五大技巧
其實很多人,因爲工作的關係久坐不動,或者有不同程度一個運動量不大的問題,素以讓很多人都有不同程度一個肥胖的問題的了。但是其實也有一部分的人本是是很瘦的了。但肚子很大的了。而且很多人陸陸續續都進入了減肥的行列 -
Java性能優化技巧大全
Java性能優化技巧大全1.儘量使用final修飾符。帶有final修飾符的類是不可派生的。在JAVA核心API中,有許多應用final的例子,例如ng。爲String類指定final防止了使用者覆蓋length()方法。另外,如果一個類是final的,則該類所 -
Java性能優化的技巧
導語:要對你的 java 代碼進行優化,需要理解 java 不同要素之間的相互作用,以及它是如何與其運行時的操作系統進行交互的。使用下面這五個技巧和資源,開始學習如何分析和優化你的代碼吧。1。 調整垃圾收集(GC)由於垃圾收集 -
Java編程性能優化技巧分享
我們的大學生活算是接近尾聲了,因爲在剩下的不多的時間裏我們已經是半個踏入社會的求職者了。今天小編就大家分享一下的畢業生的自我鑑定,有興趣的要學習哦畢業自我鑑定優秀範文經過四年的大學生活,我成長了很多。在這即 -
Java編程性能優化技巧有哪些
銷售簡歷自我評價:性格直爽、樂觀、自信的我,爲人坦城、做事認真、接受與理解力強,愛好唱歌、聽音樂、爬山、看書、寫日記等。對於自己要做的事情一定會盡心盡力盡職盡責將其做到最好,不管在任何環境下都能用最短的時間去 -
Java開發代碼性能優化是什麼
上一個教程,大家都在問這個揹包是怎麼做的,現在發一下。因爲當時製作的時候沒有拍照片,所以過程不全,大家見諒。主要材料:牛仔褲鈕釦碎布頭所需工具:鞋帶製作步驟:第1步:其實就是束口袋的變種,大家一開始就按照束口袋的做法直 -
13 個提升JavaScript 性能技巧
Daniel Clifford 在 Google I/O 2012 上做了一個精彩的演講“Breaking the JavaScript Speed Limitwith V8”。在演講中,他深入解釋了13個簡單的代碼優化方法,可以讓你的代碼在 Chrome 的 V8 JavaScript 引擎編譯/運行 -
優化JavaScript腳本的性能的方法
-
java性能調優的方法
Java是目前軟件開發領域中使用最廣泛的編程語言之一。Java應用程序在許多垂直領域(銀行、電信、醫療保健等)中都有廣泛使用。Refcard的目的是,幫助開發者通過專注於JVM內部,性能調整原則和最佳實踐。以下是小編爲大家搜 -
Java程序性能的調優
Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、數據中心、遊戲控制檯、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。下面小編準備了關於Java程序性能調優的文章,提供