常見(jiàn)程序性能優(yōu)化技巧

一胧瓜、慎用異常

在java開(kāi)發(fā)中,try-catch語(yǔ)句對(duì)系統(tǒng)性能而言有時(shí)候是非常糟糕的跺株,比如:

int  a = 0;
for(int i = 0 ; i<100000;i++){
       try{                      //在循環(huán)體內(nèi)
            a++;                    
       }catch(Exception e){
       }
}

嘗試將try-catch放在循環(huán)體外复濒,可以顯著的提升性能,比如:

int a =  0;
try{
      for(int i =0;i<100000;i++){
            a++;
      }
}catch(Exception){
}

二乒省、使用局部變量

調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中臨時(shí)創(chuàng)建的局部變量巧颈、臨時(shí)變量是保存在“棧”中的作儿,速度較快洛二,而其他變量、實(shí)例變量攻锰,類(lèi)下面定義的變量晾嘶,都是在堆中創(chuàng)建,速度較慢娶吞。
局部變量的訪問(wèn)速度遠(yuǎn)遠(yuǎn)高于類(lèi)的成員變量垒迂,所以在開(kāi)發(fā)過(guò)程中,盡量用局部變量妒蛇。

三机断、位運(yùn)算代替乘除

a *= 2;    替換成  a<<1 = 1;  代表將a 左移1位
a /= 2;    替換成   a>>1 = 1;  代表將a右移1位

四、提取重復(fù)代碼

比如:

int[]  arr = {1,5,,5,6,6,6,8,,3};
int x = 0 , y = 0 , z = Math.random;
for(int i = 0 ; i < arr.length ; i++){
        for(int j = 0 ; i<arr.length ;  j++){
              //code
              x += arr[i]*arr[j] / 3*4*z;
              y += arr[i]*arr[j] / 3*4*z;
        }
}

以上代碼arr.length計(jì)算了兩次绣夺,重復(fù)計(jì)算吏奸,必然會(huì)帶來(lái)一定的性能損耗,這是一個(gè)簡(jiǎn)單的例子陶耍,這里可以改進(jìn)為:

int[]  arr = {1,5,,5,6,6,6,8,,3};
int len = arr.length;                           //將重復(fù)的arr.length提取出來(lái)
int x = 0 , y = 0 , z = Math.random , k = 3*4*z;             //將重復(fù)的3*4*z提取出來(lái)
for(int i = 0 ; i < len ; i++){
        for(int j = 0 ; i<len ;  j++){
              //code
              x += arr[i]*arr[j] / k;             
              y += arr[i]*arr[j] / k;
        }
}

代碼不是很?chē)?yán)謹(jǐn)奋蔚,只是舉個(gè)例子

五、展開(kāi)循環(huán)

展開(kāi)循環(huán)是一種不常用的烈钞,極端條件下才用到的優(yōu)化手段
比如:

int[]  arr = new int[99999];
for(int i = 0 ;i <99999 ; i++){
        arr[i] = i;
}

增加一次循環(huán)的賦值次數(shù)泊碑,減少循環(huán)次數(shù)

int[]  arr = new int[99999];
for(int i = 0 ;i <99999 ; i+=3){    //展開(kāi)循環(huán),完成原來(lái)3個(gè)循環(huán)的工作現(xiàn)在一個(gè)就能完成
        arr[i] = i;
        arr[i+1] = i+1;
        arr[i+2] = i+2;
}

六毯欣、使用arrayCopy()

如果程序中要進(jìn)行數(shù)組的復(fù)制操作馒过,那么使用這個(gè)函數(shù)將比自己設(shè)計(jì)的算法性能要好得多。(因?yàn)镾ystem.arraycopy()是native函數(shù)酗钞,通常native函數(shù)的性能要優(yōu)于普通的函數(shù))
使用方法:

//arr代表原數(shù)組腹忽,第一個(gè)0代表開(kāi)始復(fù)制的位置来累,newArr代表新數(shù)組,第二個(gè)0代表復(fù)制的位置留凭,size代表復(fù)制的長(zhǎng)度佃扼。
System.arraycopy(arr, 0 , newArr  , 0 , size );

七、其他

比如還有
一維數(shù)組代替二維數(shù)組
使用Buffer進(jìn)行I/O操作
使用clone()代替new
靜態(tài)方法替代實(shí)例方法
集合框架的應(yīng)用場(chǎng)景
.......

學(xué)無(wú)止境

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔼夜,一起剝皮案震驚了整個(gè)濱河市兼耀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌求冷,老刑警劉巖瘤运,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異匠题,居然都是意外死亡拯坟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)韭山,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)郁季,“玉大人,你說(shuō)我怎么就攤上這事钱磅∶瘟眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵盖淡,是天一觀的道長(zhǎng)年柠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)褪迟,這世上最難降的妖魔是什么冗恨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮味赃,結(jié)果婚禮上掀抹,老公的妹妹穿的比我還像新娘。我一直安慰自己心俗,他們只是感情好渴丸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著另凌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戒幔。 梳的紋絲不亂的頭發(fā)上吠谢,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音诗茎,去河邊找鬼工坊。 笑死献汗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的王污。 我是一名探鬼主播罢吃,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昭齐!你這毒婦竟也來(lái)了尿招?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阱驾,失蹤者是張志新(化名)和其女友劉穎就谜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體里覆,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丧荐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喧枷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹统。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隧甚,靈堂內(nèi)的尸體忽然破棺而出车荔,到底是詐尸還是另有隱情,我是刑警寧澤呻逆,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布夸赫,位于F島的核電站,受9級(jí)特大地震影響咖城,放射性物質(zhì)發(fā)生泄漏茬腿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一宜雀、第九天 我趴在偏房一處隱蔽的房頂上張望切平。 院中可真熱鬧,春花似錦辐董、人聲如沸悴品。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苔严。三九已至,卻和暖如春孤澎,著一層夾襖步出監(jiān)牢的瞬間届氢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工覆旭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留退子,地道東北人岖妄。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寂祥,于是被迫代替她去往敵國(guó)和親荐虐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容