最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java性能的十一個(gè)用法分享

 更新時(shí)間:2014年10月21日 18:00:41   投稿:mdxy-dxy  
這篇文章主要介紹了Java性能的十一個(gè)用法,需要的朋友可以參考下

Java語(yǔ)言習(xí)慣用語(yǔ)

1。循環(huán)

在重要的循環(huán)里,消除循環(huán)終止判斷時(shí)的方法調(diào)用。
例如:將
for(int i=0; i<collection.size();i++){ ... }
替換為…
for(int i=0; n=collection.size();i<n;i++){...}
通常,把與循環(huán)index不相關(guān)的移到循環(huán)的外面
for(int i=0; terminal=x.length;i<terminal;i++){x[i] = x[i]/scaleA *scaleB;}
應(yīng)該該成:
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ò)誤條件 如 拋出異常時(shí)
拋出一個(gè)異常和執(zhí)行一個(gè)catch代碼塊花費(fèi)是很高的(主要由于當(dāng)創(chuàng)建一個(gè)異常時(shí)要獲得線程棧的一個(gè)快照)
只當(dāng)條件真的異常時(shí)才拋出一個(gè)異常
拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。
Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。
只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因?yàn)樵谔幚磉^(guò)程中創(chuàng)建了一個(gè)新的對(duì)象。
異常只能用于錯(cuò)誤處理,不應(yīng)該用來(lái)控制程序流程。
使編譯器和運(yùn)行時(shí)最優(yōu)化,將幾個(gè)方法調(diào)用放在一個(gè)try/catch塊中,而不是為每個(gè)方法調(diào)用實(shí)現(xiàn)幾個(gè)try/catch塊

try{ Some.method1(); //Difficut for java1.4 }catch(method1Exception e){ handle exception
1 // to optimize this code } try{ Some.method2(); //Difficut for java1.4 }catch(method2Exception e){ handle exception
2 // to optimize this code } try{ Some.method3(); //Difficut for java1.4 }catch(method3Exception e){ handle exception
3 // to optimize this code
}

應(yīng)該寫為:

try{ Some.method1(); Some.method2(); Some.method3(); //Difficut for java1.4 }catch(method1Exception e){ handle exception 1 }catch(method2Exception e){ handle exception 2 }catch(method3Exception e){ handle exception 3 }

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)上怎么樣是最快的

6。不用new關(guān)鍵詞創(chuàng)建類的實(shí)例

用new關(guān)鍵詞創(chuàng)建類的實(shí)例時(shí),構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用。

但如果一個(gè)對(duì)象實(shí)現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會(huì)調(diào)用任何類構(gòu)造函數(shù)。

在使用設(shè)計(jì)模式(Design Pattern)的場(chǎng)合,如果用Factory模式創(chuàng)建對(duì)象,則改用clone()方法創(chuàng)建新的對(duì)象實(shí)例非常簡(jiǎn)單。

例如,下面是Factory模式的一個(gè)典型實(shí)現(xiàn):

public static Credit getNewCredit() { return new Credit(); }

優(yōu)化后:

private static Credit BaseCredit = new Credit(); public static Credit getNewCredit() { return (Credit) BaseCredit.clone();}

上面的思路對(duì)于數(shù)組處理同樣很有用。

7。使用非阻塞I/O

Java版本較低的JDK不支持非阻塞I/O API。為避免I/O阻塞,一些應(yīng)用采用了創(chuàng)建大量線程的辦法(在較好的情況下,會(huì)使用一個(gè)緩沖池)。這種技術(shù)可以在許多必須支持并發(fā)I/O流的應(yīng)用中見(jiàn)到,如Web服務(wù)器、報(bào)價(jià)和拍賣應(yīng)用等。然而,創(chuàng)建Java線程需要相當(dāng)可觀的開(kāi)銷。

JDK 1.4引入了非阻塞的I/O庫(kù)(java.nio)。如果應(yīng)用要求使用版本較早的JDK,在這里有一個(gè)支持非阻塞I/O的軟件包。

8。不要重復(fù)初始化變量

默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時(shí), Java會(huì)把變量初始化成確定的值:所有的對(duì)象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和 double變量設(shè)置成0.0,邏輯值設(shè)置成false。

當(dāng)一個(gè)類從另一個(gè)類派生時(shí),這一點(diǎn)尤其應(yīng)該注意,因?yàn)橛胣ew關(guān)鍵詞創(chuàng)建一個(gè)對(duì)象時(shí),構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用。

9。盡量指定類的final修飾符

帶有final修飾符的類是不可派生的。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。

另外,如果指定一個(gè)類為final,則該類所有的方法都是final。Java編譯器會(huì)尋找機(jī)會(huì)內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實(shí)現(xiàn)有關(guān))。此舉能夠使性能平均提高50%。

10。盡量使用局部變量

調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實(shí)例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。請(qǐng)參見(jiàn)《盡可能使用堆棧變量》。

11。乘法和除法

考慮下面的代碼:

for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }

優(yōu)化后:

for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

修改后的代碼不再做乘以8的操作,而是改用等價(jià)的左移3位操作,每左移1位相當(dāng)于乘以2。相應(yīng)地,右移1位操作相當(dāng)于除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難于理解,所以最好加上一些注釋。

private static Credit BaseCredit = new Credit();public static Credit getNewCredit() {return (Credit) BaseCredit.clone();}

相關(guān)文章

  • SpringBoot使用Thymeleaf自定義標(biāo)簽的實(shí)例代碼

    SpringBoot使用Thymeleaf自定義標(biāo)簽的實(shí)例代碼

    這篇文章主要介紹了SpringBoot使用Thymeleaf自定義標(biāo)簽的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot的@GetMapping路徑匹配規(guī)則、國(guó)際化詳細(xì)教程

    SpringBoot的@GetMapping路徑匹配規(guī)則、國(guó)際化詳細(xì)教程

    這篇文章主要介紹了SpringBoot的@GetMapping路徑匹配規(guī)則、國(guó)際化,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Java中一個(gè)for語(yǔ)句導(dǎo)致無(wú)窮大死循環(huán)的例子

    Java中一個(gè)for語(yǔ)句導(dǎo)致無(wú)窮大死循環(huán)的例子

    這篇文章主要介紹了Java中一個(gè)for語(yǔ)句導(dǎo)致無(wú)窮大死循環(huán)的例子,本文給出的是一個(gè)很特別的例子,這個(gè)例子會(huì)跟你所想的結(jié)果不一樣,需要的朋友可以參考下
    2015-06-06
  • SpringBoot如何自動(dòng)生成API文檔詳解

    SpringBoot如何自動(dòng)生成API文檔詳解

    網(wǎng)絡(luò)程序正朝著移動(dòng)設(shè)備的方向發(fā)展,前后端分離、APP,最好的交互交互方式莫過(guò)于通過(guò)API接口實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于SpringBoot如何自動(dòng)生成API文檔的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ基礎(chǔ)及環(huán)境整合

    微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ基礎(chǔ)及環(huán)境整合

    這篇文章主要介紹了微服務(wù)架構(gòu)設(shè)計(jì)入門RocketMQ的基礎(chǔ)及環(huán)境整合實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • SpringCloud Bus如何實(shí)現(xiàn)配置刷新

    SpringCloud Bus如何實(shí)現(xiàn)配置刷新

    這篇文章主要介紹了SpringCloud Bus如何實(shí)現(xiàn)配置刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Installij IDEA install或clean項(xiàng)目的使用

    Installij IDEA install或clean項(xiàng)目的使用

    這篇文章主要介紹了Installij IDEA install或clean項(xiàng)目的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • mybatis模糊查詢之bind標(biāo)簽和concat函數(shù)用法詳解

    mybatis模糊查詢之bind標(biāo)簽和concat函數(shù)用法詳解

    大家都知道bind 標(biāo)簽可以使用 OGNL 表達(dá)式創(chuàng)建一個(gè)變量井將其綁定到上下文中,接下來(lái)通過(guò)本文給大家介紹了mybatis模糊查詢——bind標(biāo)簽和concat函數(shù)用法,需要的朋友可以參考下
    2022-08-08
  • 初識(shí)Java8中的Stream

    初識(shí)Java8中的Stream

    lambda表達(dá)式是stream的基礎(chǔ),接下來(lái)通過(guò)實(shí)例代碼給大家詳細(xì)介紹java8中的stream,感興趣的朋友一起看看吧
    2017-08-08
  • Spring Boot非Web項(xiàng)目運(yùn)行的方法

    Spring Boot非Web項(xiàng)目運(yùn)行的方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot非Web項(xiàng)目運(yùn)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

满城县| 鞍山市| 徐汇区| 宣恩县| 历史| 兰溪市| 湘潭市| 县级市| 永定县| 西平县| 庆云县| 永顺县| 汤阴县| 广宁县| 蕉岭县| 鲁山县| 莱西市| 云霄县| 长岛县| 临泉县| 嘉善县| 浑源县| 曲松县| 英德市| 利津县| 武安市| 稻城县| 德保县| 化德县| 文山县| 道孚县| 临海市| 盐亭县| 东光县| 福鼎市| 仁寿县| 甘南县| 河源市| 那曲县| 景东| 闵行区|