分享幾個提高Java性能的高效用法
1.在重要的循環(huán)里,消除循環(huán)終止判斷時的方法調用
for(int i=0; i<collection.size(); i++)
{
...
}
for(int i=0; i<collection.size(); i++)
{
...
}
替換為…
view plaincopy to clipboardprint?
for(int i=0;n=collection.size();i<n;i++)
{
...
}
2.通常,把與循環(huán)index不相關的移到循環(huán)的外面
for(int i=0;terminal=x.length;i<terminal;i++){
X[i]=x[i]/scaleA*scaleB;
}
for(int i=0;terminal=x.length;i<terminal;i++){
X[i]=x[i]/scaleA*scaleB;
}
改為
double scale = scaleB/scaleA;
for(int i=0; terminal=x.length; i<terminal; i++){
X[i]=x[i]*scale;
}
2.字符串
消除字符串連接
創(chuàng)建長字符串時,總是使用StringBuffter代替String
預先分配StringBuffer空間
StringBuffer sb = new StringBuffer(5000);
3.基本數(shù)據(jù)類型
在重要的循環(huán)里使用基本數(shù)據(jù)類型(int型數(shù)據(jù)通常比long/double型數(shù)據(jù)更快)
基本數(shù)據(jù)類型(Boolean,Integer,etc)的包裝類主要用在當傳遞的方法參數(shù)必須是一個對象的引用時(而不是一個基本數(shù)據(jù)類型)
對所有的常量代數(shù)表達式使用static final修飾符
一 使常量更容易引用(編譯器預先計算常量表達式)
4.異常
異常只用于單個真正的錯誤條件
一 拋出一個異常和執(zhí)行一個catch代碼塊花費是很高的(主要由于當創(chuàng)建一個異常時要獲得線程棧的一個快照)
一 只當條件真的異常時才拋出一個異常
使編譯器和運行時最優(yōu)化,將幾個方法調用放在一個try/catch塊中,而不是為每個方法調用實現(xiàn)幾個try/catch塊
5.基準
注意,所有這些技巧會因不同的平臺和虛擬機而不同
一 例如:在有些servlet容器內,通過一個OutputStream作為字節(jié)輸出會更快
一 在其它的容器內,通過一個PrintWriter輸出字符會更快
這些技巧描述的是最可移植的建議
你可能需要運行一些基準來判斷在你的平臺上怎么樣是最快的
相關文章
Java獲取XML節(jié)點總結之讀取XML文檔節(jié)點的方法
下面小編就為大家?guī)硪黄狫ava獲取XML節(jié)點總結之讀取XML文檔節(jié)點的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
SpringBoot應用程序啟動監(jiān)聽功能的常見方法
應用啟動監(jiān)聽在?Spring?Boot?和其他框架中扮演著重要的角色,它們的主要作用是在應用啟動或關閉時觸發(fā)特定的操作或任務,本文給大家介紹了SpringBoot應用程序啟動監(jiān)聽功能的常見方法,需要的朋友可以參考下2024-05-05
JUC并發(fā)編程LinkedBlockingQueue隊列深入分析源碼
LinkedBlockingQueue 是一個可選有界阻塞隊列,這篇文章主要為大家詳細介紹了Java中LinkedBlockingQueue的實現(xiàn)原理與適用場景,感興趣的可以了解一下2023-04-04

