執行乙個
catch
**塊和丟擲乙個異常花費是很高的,這個過程中的效能損耗主要是由於當建立乙個異常時要獲得執行緒棧的乙個快照。丟擲異常首先要建立乙個新的物件
throwable
類的構造函式呼叫名為
fillinstacktrace
的方法,
fillinstacktrace
方法檢查堆疊,收集呼叫跟蹤資訊。由於在處理過程中建立了乙個新的物件,所以說只要有異常被丟擲,
jvm就必須調整呼叫堆疊,系統資源開銷也就增大了。
1、使編譯器和執行時最優化,將幾個方法呼叫放在乙個try/catch塊中,而不是為每個方法呼叫各自使用try/catch塊
trycatch(method1exception e)
trycatch(method2exception e)
trycatch(method3exception e)
應當優化為如下**
trycatch(method1exception e)catch(method2exception e)catch(method3exception e)
2、異常只能用於錯誤處理,不應該用來控制程式流程。
public class test
public void reset()
// calculates without exception
public void method1(int i)
}// could in theory throw one, but never will
public void method2(int i) throws exception
}// this one will regularly throw one
public void method3(int i) throws exception
}public static void main(string args)
l = system.currenttimemillis() - l;
system.out.println(
"method1 took " + l + " ms, result was " + t.getvalue()
);l = system.currenttimemillis();
t.reset();
for (i = 1; i < 100000000; i++) catch (exception e)
}l = system.currenttimemillis() - l;
system.out.println(
"method2 took " + l + " ms, result was " + t.getvalue()
);l = system.currenttimemillis();
t.reset();
for (i = 1; i < 100000000; i++) catch (exception e)
}l = system.currenttimemillis() - l;
system.out.println(
"method3 took " + l + " ms, result was " + t.getvalue());}
}
上段**首先建立了三個方法,在這三個方法當中第乙個沒有丟擲異常,第二個當符合條件的時候丟擲異常,第三個和第二個一樣。(實際上三個方法中value的存在就是為了延長程式的執行時間,沒有實際意義。)
從執行結果可以看出來丟擲異常是相當消耗資源的,儘管有時不出現異常時效能尚可,但是依然不建議用異常控制程式流程。
不做多餘的的事情就是調優,保證功能實現的情況下最低程度的減少開銷就是優化。
系統效能調優
系統效能調優 效能測試分析人員經過對結果的分析以後,有可能提出系統存在效能瓶頸。這時相關開發人員 資料庫管理員 系統管理員 網路管理員等就需要根據效能測試分析人員提出的意見同效能分析人員共同分析確定更細節的內容,相關人員對系統進行調整以後,效能測試人員繼續進行第二輪 第三輪 的測試,與以前的測試結果...
系統效能調優
系統效能調優 效能測試分析人員經過對結果的分析以後,有可能提出系統存在效能瓶頸。這時相關開發人員 資料庫管理員 系統管理員 網路管理員等就需要根據效能測試分析人員提出的意見同效能分析人員共同分析確定更細節的內容,相關人員對系統進行調整以後,效能測試人員繼續進行第二輪 第三輪 的測試,與以前的測試結果...
系統效能調優感悟
1 減少事務的時間,盡快的結束事務。2 減少對資料庫的訪問,避免不必要的資料庫訪問。4 減少sql的巢狀呼叫,控制巢狀的層次。比如sql巢狀呼叫,自己呼叫自己。5 把查詢和更新的sql分開處理。不要一條sql包辦。6 查詢條件最好按照索引來寫,減少不必要的where條件,盡快的縮小查詢範圍。7 把一...