分享幾個(gè)提高Java性能的高效用法
1.在重要的循環(huán)里,消除循環(huán)終止判斷時(shí)的方法調(diào)用
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不相關(guān)的移到循環(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)建長(zhǎng)字符串時(shí),總是使用StringBuffter代替String
預(yù)先分配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)的包裝類主要用在當(dāng)傳遞的方法參數(shù)必須是一個(gè)對(duì)象的引用時(shí)(而不是一個(gè)基本數(shù)據(jù)類型)
對(duì)所有的常量代數(shù)表達(dá)式使用static final修飾符
一 使常量更容易引用(編譯器預(yù)先計(jì)算常量表達(dá)式)
4.異常
異常只用于單個(gè)真正的錯(cuò)誤條件
一 拋出一個(gè)異常和執(zhí)行一個(gè)catch代碼塊花費(fèi)是很高的(主要由于當(dāng)創(chuàng)建一個(gè)異常時(shí)要獲得線程棧的一個(gè)快照)
一 只當(dāng)條件真的異常時(shí)才拋出一個(gè)異常
使編譯器和運(yùn)行時(shí)最優(yōu)化,將幾個(gè)方法調(diào)用放在一個(gè)try/catch塊中,而不是為每個(gè)方法調(diào)用實(shí)現(xiàn)幾個(gè)try/catch塊
5.基準(zhǔn)
注意,所有這些技巧會(huì)因不同的平臺(tái)和虛擬機(jī)而不同
一 例如:在有些servlet容器內(nèi),通過(guò)一個(gè)OutputStream作為字節(jié)輸出會(huì)更快
一 在其它的容器內(nèi),通過(guò)一個(gè)PrintWriter輸出字符會(huì)更快
這些技巧描述的是最可移植的建議
你可能需要運(yùn)行一些基準(zhǔn)來(lái)判斷在你的平臺(tái)上怎么樣是最快的
- Java遍歷集合方法分析(實(shí)現(xiàn)原理、算法性能、適用場(chǎng)合)
- Java并發(fā)編程之性能、擴(kuò)展性和響應(yīng)
- java開(kāi)發(fā)中如何使用JVisualVM進(jìn)行性能分析
- 使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名
- 淺談JAVA 異常對(duì)于性能的影響
- Java中Map的遍歷方法及性能測(cè)試
- Java虛擬機(jī)JVM性能優(yōu)化(三):垃圾收集詳解
- Java虛擬機(jī)JVM性能優(yōu)化(一):JVM知識(shí)總結(jié)
- java字符串拼接與性能分析詳解
- JAVA LinkedList和ArrayList的使用及性能分析
- Java性能調(diào)優(yōu)概述
相關(guān)文章
Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式
這篇文章主要介紹了Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式,本文通過(guò)兩種方式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07詳談Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié)(分享)
下面小編就為大家分享一篇Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12利用Jackson實(shí)現(xiàn)數(shù)據(jù)脫敏的示例詳解
在我們的企業(yè)項(xiàng)目中,為了保護(hù)用戶隱私,數(shù)據(jù)脫敏成了必不可少的操作,那么我們?cè)趺磧?yōu)雅的利用Jackson實(shí)現(xiàn)數(shù)據(jù)脫敏呢,本文就來(lái)和大家詳細(xì)聊聊,希望對(duì)大家有所幫助2023-05-05maven報(bào)錯(cuò):Failed to execute goal on p
這篇文章主要介紹了maven報(bào)錯(cuò):Failed to execute goal on project問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04mybatis plus實(shí)體類中字段映射mysql中的json格式方式
這篇文章主要介紹了mybatis plus實(shí)體類中字段映射mysql中的json格式方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08關(guān)于@ApiImplicitParams、ApiImplicitParam的使用說(shuō)明
這篇文章主要介紹了關(guān)于@ApiImplicitParams、ApiImplicitParam的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10深入理解MyBatis中的一級(jí)緩存與二級(jí)緩存
這篇文章主要給大家深入的介紹了關(guān)于MyBatis中一級(jí)緩存與二級(jí)緩存的相關(guān)資料,文中詳細(xì)介紹MyBatis中一級(jí)緩存與二級(jí)緩存的工作原理及使用,對(duì)大家具有一定的參考性學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06java爬蟲(chóng)Gecco工具抓取新聞實(shí)例
本篇文章主要介紹了JAVA 爬蟲(chóng)Gecco工具抓取新聞實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10