国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java性能優(yōu)化筆記 —— for循環(huán)

pkhope / 992人閱讀

摘要:異常捕獲在內(nèi)部捕獲異常耗時(shí)優(yōu)化后在外部捕獲異常耗時(shí)結(jié)論捕獲異常是很耗資源的,所以不要講放到循環(huán)內(nèi)部。

1.多層嵌套循環(huán)
stratTime = System.nanoTime();  
for (int i = 0; i <10000 ; i++) {  
    for (int j = 0; j < 100; j++) {
        for (int k = 0; k < 10; k++) {  
            testFunction(i, j, k);
        }
    }
}
System.out.println("外大內(nèi)小耗時(shí):"+ (endTime - stratTime));  

優(yōu)化后:

stratTime = System.nanoTime();  
for (int i = 0; i <10 ; i++) {  
    for (int j = 0; j < 100; j++) {
        for (int k = 0; k < 10000; k++) {  
            testFunction(i, j, k);
        }
    }
}
endTime = System.nanoTime();  
System.out.println("外小內(nèi)大耗時(shí):"+(endTime - stratTime)); 

兩者耗時(shí)對(duì)比:

外大內(nèi)小耗時(shí):1582127649  
外小內(nèi)大耗時(shí):761666633  
優(yōu)化原理

我們先分析原代碼循環(huán)變量在實(shí)例化、初始化、比較、自增等方面的耗時(shí)情況:

優(yōu)化前:

變量 實(shí)例化(次數(shù)) 初始化(次數(shù)) 比較(次數(shù)) 自增(次數(shù))
i 1 1 10000 10000
j 10000 10000 10000*100 10000*100
k 10000*100 10000*100 1000010010 1000010010

優(yōu)化后:

變量 實(shí)例化(次數(shù)) 初始化(次數(shù)) 比較(次數(shù)) 自增(次數(shù))
i 1 1 10 10
j 10 10 10*100 10*100
k 10*100 10*100 1010010000 1010010000
結(jié)論

嵌套循環(huán)應(yīng)該遵循“外小內(nèi)大”的原則

2.循環(huán)變量的實(shí)例化應(yīng)放在循環(huán)外

在1.中優(yōu)化后的代碼基礎(chǔ)上,進(jìn)行二次優(yōu)化:

stratTime = System.nanoTime();  
int i, j, k;
for (i = 0; i <10 ; i++) {  
    for (j = 0; j < 100; j++) {
        for (k = 0; k < 10000; k++) {  
            testFunction(i, j, k);
        }
    }
}
endTime = System.nanoTime();  
System.out.println("提取出循環(huán)內(nèi)變量后耗時(shí):"+(endTime - stratTime));

結(jié)果如下:

 外小內(nèi)大耗時(shí):761666633  
 提取出循環(huán)內(nèi)變量后耗時(shí):748479323
 

優(yōu)化并不明顯,但是當(dāng)循環(huán)越大時(shí),耗時(shí)會(huì)差距更大

## 優(yōu)化原理
優(yōu)化后:

變量 實(shí)例化(次數(shù)) 初始化(次數(shù)) 比較(次數(shù)) 自增(次數(shù))
i 1 1 10 10
j 1 10 10*100 10*100
k 1 10*100 1010010000 1010010000
結(jié)論

循環(huán)變量的實(shí)例化應(yīng)該盡量放在循環(huán)外進(jìn)行

3.提取與循環(huán)無關(guān)的表達(dá)式
stratTime = System.nanoTime();  
for (int i = 0; i < 10000000; i++) {  
    i=i*a*b;  
}  
endTime = System.nanoTime();  
System.out.println("未提取耗時(shí):"+(endTime - stratTime)); 

優(yōu)化后:

stratTime = System.nanoTime();  
c = a*b;  
for (int i = 0; i < 10000000; i++) {  
    i=i*c;  
}  
endTime = System.nanoTime();  
System.out.println("已提取耗時(shí):"+(endTime - stratTime));  
結(jié)論:

代碼中a+b與我們的循環(huán)無關(guān),所以應(yīng)該把它放到外面,避免重復(fù)計(jì)算。

4.消除循環(huán)終止判斷時(shí)的方法調(diào)用
stratTime = System.nanoTime();  
for (int i = 0; i < list.size(); i++) {  
      
}  
endTime = System.nanoTime();  
System.out.println("未優(yōu)化list耗時(shí):"+(endTime - stratTime));
 

優(yōu)化后:

stratTime = System.nanoTime();  
int size = list.size();  
for (int i = 0; i < size; i++) {  
      
}  
endTime = System.nanoTime();  
System.out.println("優(yōu)化list耗時(shí):"+(endTime - stratTime));
結(jié)論

list.size()每次循環(huán)都會(huì)被執(zhí)行一次,這無疑會(huì)影響程序的性能,所以應(yīng)該將其放到循環(huán)外面,用一個(gè)變量來代替。

5.異常捕獲
 stratTime = System.nanoTime();  
for (int i = 0; i < 10000000; i++) {  
    try {  
    } catch (Exception e) {  
    }  
}  
endTime = System.nanoTime();  
System.out.println("在內(nèi)部捕獲異常耗時(shí):"+(endTime - stratTime));

優(yōu)化后:

stratTime = System.nanoTime();  
try {  
    for (int i = 0; i < 10000000; i++) {  
    }  
} catch (Exception e) {  
  
}  
endTime = System.nanoTime();  
System.out.println("在外部捕獲異常耗時(shí):"+(endTime - stratTime));
結(jié)論

捕獲異常是很耗資源的,所以不要講try catch放到循環(huán)內(nèi)部。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/68134.html

相關(guān)文章

  • 程序員筆記|如何編寫高性能Java代碼

    摘要:常見標(biāo)高線程上下文切換頻繁線程太多鎖競(jìng)爭(zhēng)激烈標(biāo)高如果的占用很高,排查涉及到的程序,比如把改造成。抖動(dòng)問題原因字節(jié)碼轉(zhuǎn)為機(jī)器碼需要占用時(shí)間片,大量的在執(zhí)行字節(jié)碼時(shí),導(dǎo)致長(zhǎng)期處于高位現(xiàn)象,占用率最高解決辦法保證編譯線程的占比。 一、并發(fā) Unable to create new native thread …… 問題1:Java中創(chuàng)建一個(gè)線程消耗多少內(nèi)存? 每個(gè)線程有獨(dú)自的棧內(nèi)存,共享堆內(nèi)...

    ky0ncheng 評(píng)論0 收藏0
  • 讀書筆記(03) - 性能 - JavaScript高級(jí)程序設(shè)計(jì)

    摘要:作用域鏈查找作用域鏈的查找是逐層向上查找。而全局變量和閉包則會(huì)與之相反,繼續(xù)保存,所以使用用后需手動(dòng)標(biāo)記清除,以免造成內(nèi)存泄漏。獲取元素的屬性獲取元素的屬性等參考文檔高級(jí)程序設(shè)計(jì)作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXV?w=500&h=399); 作用域鏈查找 作用域鏈的查找是逐層向上查找。查...

    warnerwu 評(píng)論0 收藏0
  • JS性能優(yōu)化筆記

    摘要:四如果需要遍歷數(shù)組,應(yīng)該先緩存數(shù)組長(zhǎng)度,將數(shù)組長(zhǎng)度放入局部變量中,避免多次查詢數(shù)組長(zhǎng)度。五盡量選用局部變量而不是全局變量。所以如果這樣的表達(dá)式重復(fù)出現(xiàn),只要可能,應(yīng)該盡量少出現(xiàn)這樣的表達(dá)式,可以利用局部變量,把它放入一個(gè)臨時(shí)的地方進(jìn)行查詢。 通過網(wǎng)上查找資料了解關(guān)于性能優(yōu)化方面的內(nèi)容,現(xiàn)簡(jiǎn)單整理,僅供大家在優(yōu)化的過程中參考使用,如有什么問題請(qǐng)及時(shí)提出,再做出相應(yīng)的補(bǔ)充修改。 一、 讓...

    baoxl 評(píng)論0 收藏0
  • java筆記

    摘要:沒有被引用和沒有被使用是兩碼事。對(duì)這一段代碼如何做出優(yōu)化盡量的在里面少創(chuàng)建對(duì)象。那么這一萬條數(shù)據(jù)循環(huán)然后反序列化變成,性能就回很低。 1.沒有被引用和沒有被使用是兩碼事。 javapublic List getConcernListByUserId(String userId) { List myBlackLists= this.getMyBlackListByUse...

    xi4oh4o 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-讀書筆記第一章(02)

    摘要:實(shí)戰(zhàn)讀書筆記第一章從方法傳遞到接著上次的,繼續(xù)來了解一下,如果繼續(xù)簡(jiǎn)化代碼。去掉并且生成的數(shù)字是萬,所消耗的時(shí)間循序流并行流至于為什么有時(shí)候并行流效率比循序流還低,這個(gè)以后的文章會(huì)解釋。 《Java8實(shí)戰(zhàn)》-讀書筆記第一章(02) 從方法傳遞到Lambda 接著上次的Predicate,繼續(xù)來了解一下,如果繼續(xù)簡(jiǎn)化代碼。 把方法作為值來傳遞雖然很有用,但是要是有很多類似與isHeavy...

    lushan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<