亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java性能的十一個用法分享

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

Java語言習慣用語

1。循環(huán)

在重要的循環(huán)里,消除循環(huán)終止判斷時的方法調用。
例如:將
for(int i=0; i<collection.size();i++){ ... }
替換為…
for(int i=0; n=collection.size();i<n;i++){...}
通常,把與循環(huán)index不相關的移到循環(huán)的外面
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)建長字符串時,總是使用StringBuffter代替String
預先分配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)的包裝類主要用在當傳遞的方法參數(shù)必須是一個對象的引用時(而不是一個基本數(shù)據(jù)類型)
對所有的常量代數(shù)表達式使用static final修飾符
使常量更容易引用(編譯器預先計算常量表達式)

4。異常

異常只用于單個真正的錯誤條件 如 拋出異常時
拋出一個異常和執(zhí)行一個catch代碼塊花費是很高的(主要由于當創(chuàng)建一個異常時要獲得線程棧的一個快照)
只當條件真的異常時才拋出一個異常
拋出異常首先要創(chuàng)建一個新的對象。
Throwable接口的構造函數(shù)調用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。
只要有異常被拋出,VM就必須調整調用堆棧,因為在處理過程中創(chuàng)建了一個新的對象。
異常只能用于錯誤處理,不應該用來控制程序流程。
使編譯器和運行時最優(yōu)化,將幾個方法調用放在一個try/catch塊中,而不是為每個方法調用實現(xiàn)幾個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
}

應該寫為:

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?;鶞?/strong>

注意,所有這些技巧會因不同的平臺和虛擬機而不同

一 例如:在有些servlet容器內,通過一個OutputStream作為字節(jié)輸出會更快

二 在其它的容器內,通過一個PrintWriter輸出字符會更快

這些技巧描述的是最可移植的建議

你可能需要運行一些基準來判斷在你的平臺上怎么樣是最快的

6。不用new關鍵詞創(chuàng)建類的實例

用new關鍵詞創(chuàng)建類的實例時,構造函數(shù)鏈中的所有構造函數(shù)都會被自動調用。

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

在使用設計模式(Design Pattern)的場合,如果用Factory模式創(chuàng)建對象,則改用clone()方法創(chuàng)建新的對象實例非常簡單。

例如,下面是Factory模式的一個典型實現(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();}

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

7。使用非阻塞I/O

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

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

8。不要重復初始化變量

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

當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞創(chuàng)建一個對象時,構造函數(shù)鏈中的所有構造函數(shù)都會被自動調用。

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

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

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

10。盡量使用局部變量

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

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的操作,而是改用等價的左移3位操作,每左移1位相當于乘以2。相應地,右移1位操作相當于除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難于理解,所以最好加上一些注釋。

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

相關文章

  • spring整合cxf框架實例

    spring整合cxf框架實例

    下面小編就為大家?guī)硪黄猻pring整合cxf框架實例。小編覺得挺不錯的。現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Springboot AOP開發(fā)教程

    Springboot AOP開發(fā)教程

    AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點,也是Spring框架中的一個重要內容,是函數(shù)式編程的一種衍生范型,本文給大家介紹Springboot AOP開發(fā)教程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java tomcat環(huán)境變量及idea配置解析

    Java tomcat環(huán)境變量及idea配置解析

    這篇文章主要介紹了Java tomcat環(huán)境變量及idea配置解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Maven分模塊開發(fā)與依賴管理和聚合和繼承及屬性深入詳細介紹

    Maven分模塊開發(fā)與依賴管理和聚合和繼承及屬性深入詳細介紹

    依賴管理是項目管理中非常重要的一環(huán)。幾乎任何項目開發(fā)的時候需要都需要使用到庫。而這些庫很可能又依賴別的庫,這樣整個項目的依賴形成了一個樹狀結構,而隨著這個依賴的樹的延伸和擴大,一系列問題就會隨之產(chǎn)生
    2022-10-10
  • 詳解Spring Cloud Hystrix斷路器實現(xiàn)容錯和降級

    詳解Spring Cloud Hystrix斷路器實現(xiàn)容錯和降級

    本篇文章主要介紹了詳解Spring Cloud Hystrix斷路器實現(xiàn)容錯和降級,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java線程中start和run方法全面解析

    Java線程中start和run方法全面解析

    這篇文章主要介紹了Java線程中start和run方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • Java中Reactor的反應器模式詳解

    Java中Reactor的反應器模式詳解

    這篇文章主要介紹了Java中Reactor的反應器模式詳解,Reactor反應器模式有點兒類似事件驅動模式,當有事件觸發(fā)時,事件源會將事件dispatch分發(fā)到handler處理器進行事件處理,反應器模式中的反應器角色類似于事件驅動模式中的dispatcher事件分發(fā)器角色,需要的朋友可以參考下
    2023-12-12
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請求,本篇文章我們將詳細為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學跟著小編一起來學習吧
    2023-06-06
  • Java內部類_動力節(jié)點Java學院整理

    Java內部類_動力節(jié)點Java學院整理

    內部類是指在一個外部類的內部再定義一個類。下面通過本文給大家java內部類的使用小結,需要的朋友參考下吧
    2017-04-04
  • Java中常用的9種文件下載方法總結

    Java中常用的9種文件下載方法總結

    下載文件在我們項目很常見,有下載視頻、文件、圖片、附件、導出Excel等,所以本文為大家整理了9中Java中常用的文件下載方式,希望對大家有所幫助
    2023-09-09

最新評論