Java效能最佳化通用篇

來源:互聯網
上載者:User
效能|最佳化 一、通用篇

“通用篇”討論的問題適合於大多數Java應用。


1.1 不用new關鍵詞建立類的執行個體


用new關鍵詞建立類的執行個體時,建構函式鏈中的所有建構函式都會被自動調用。但如果一個對象實現了Cloneable介面,我們可以調用它的clone()方法。clone()方法不會調用任何類建構函式。


在使用設計模式(Design Pattern)的場合,如果用Factory模式建立對象,則改用clone()方法建立新的對象執行個體非常簡單。例如,下面是Factory模式的一個典型實現:


public static Credit getNewCredit() {return new Credit();}




改進後的代碼使用clone()方法,如下所示:


private static Credit BaseCredit = new Credit();public static Credit getNewCredit() {return (Credit) BaseCredit.clone();}





上面的思路對於數組處理同樣很有用。


1.2 使用非阻塞I/O


版本較低的JDK不支援非阻塞I/O API。為避免I/O阻塞,一些應用採用了建立大量線程的辦法(在較好的情況下,會使用一個緩衝池)。這種技術可以在許多必須支援並發I/O流的應用中見到,如Web伺服器、報價和拍賣應用等。然而,建立Java線程需要相當可觀的開銷。


JDK 1.4引入了非阻塞的I/O庫(java.nio)。如果應用要求使用版本較早的JDK,在這裡有一個支援非阻塞I/O的軟體包。


1.3 慎用異常


異常對效能不利。拋出異常首先要建立一個新的對象。Throwable介面的建構函式調用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤資訊。只要有異常被拋出,VM就必須調整呼叫堆疊,因為在處理過程中建立了一個新的對象。


異常只能用於錯誤處理,不應該用來控製程序流程。


1.4 不要重複初始設定變數


預設情況下,調用類的建構函式時, Java會把變數初始化成確定的值:所有的對象被設定成null,整數變數(byte、short、int、long)設定成0,float和 double變數設定成0.0,邏輯值設定成false。當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞建立一個對象時,建構函式鏈中的所有建構函式都會被自動調用。


1.5 盡量指定類的final修飾符


帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。


另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使效能平均提高50%。


1.6 盡量使用局部變數


調用方法時傳遞的參數以及在調用中建立的臨時變數都儲存在棧(Stack)中,速度較快。其他變數,如靜態變數、執行個體變數等,都在堆(Heap)中建立,速度較慢。另外,依賴於具體的編譯器/JVM,局部變數還可能得到進一步最佳化。


1.7 乘法和除法


考慮下面的代碼:


for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }




用移位操作替代乘法操作可以極大地提高效能。下面是修改後的代碼:


for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }





修改後的代碼不再做乘以8的操作,而是改用等價的左移3位操作,每左移1位相當於乘以2。相應地,右移1位操作相當於除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難於理解,所以最好加上一些注釋。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.