六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Java優(yōu)化性能技巧集錦(上)

[摘要]一、通用篇   “通用篇”討論的問題適合于大多數(shù)Java應(yīng)用。    1.1 不用new關(guān)鍵詞創(chuàng)建類的實例    用new關(guān)鍵詞創(chuàng)建類的實例時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。但如果一個對象實現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會調(diào)用任何類...
一、通用篇

  “通用篇”討論的問題適合于大多數(shù)Java應(yīng)用。

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

   用new關(guān)鍵詞創(chuàng)建類的實例時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。但如果一個對象實現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會調(diào)用任何類構(gòu)造函數(shù)。

   在使用設(shè)計模式(Design Pattern)的場合,如果用Factory模式創(chuàng)建對象,則改用clone()方法創(chuàng)建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現(xiàn):

   public static Credit getNewCredit() {
   return new Credit();
   }
   改進后的代碼使用clone()方法,如下所示:

   private static Credit BaseCredit = new Credit();
   public static Credit getNewCredit() {
   return (Credit) BaseCredit.clone();
   }
   上面的思路對于數(shù)組處理同樣很有用。

   1.2 使用非阻塞I/O

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

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

   請參見Sun中國網(wǎng)站的《調(diào)整Java的I/O性能》。

   1.3 慎用異常

   異常對性能不利。拋出異常首先要創(chuàng)建一個新的對象。Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因為在處理過程中創(chuàng)建了一個新的對象。

   異常只能用于錯誤處理,不應(yīng)該用來控制程序流程。

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

   默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時, Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和double變量設(shè)置成0.0,邏輯值設(shè)置成false。當(dāng)一個類從另一個類派生時,這一點尤其應(yīng)該注意,因為用new關(guān)鍵詞創(chuàng)建一個對象時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。

   1.5 盡量指定類的final修飾符

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

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

   1.6 盡量使用局部變量

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

   1.7 乘法和除法

   考慮下面的代碼:

   for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
   用移位操作替代乘法操作可以極大地提高性能。下面是修改后的代碼:

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




主站蜘蛛池模板: 午夜福免费福利在线观看 | 青草资源站 | 青春草在线视频精品 | 午夜性色福利影院 | 中文字幕乱码系列免费 | 日本www色视频成人免费免费 | 欧美性猛交xxxx乱大交be | 欧美性v视频播放 | 在线观看视频一区二区三区 | 色噜噜噜噜亚洲第一 | 日韩天天操 | 日韩经典欧美一区二区三区 | 天堂日本岛a | 天天躁夜夜躁狠狠躁躁88 | 香蕉视频一级 | 又粗又大又爽免费视频 | 日日a.v拍夜夜添久久免费 | 香蕉漫画基地成人 | 青青青在线视频 | 亚洲 欧美 成人日韩 | 亚洲专区一 | 亚洲国产精品日韩专区avtube | 日本高清视频在线www色下载 | 日本翁熄系列乱在线视频 | 日韩a在线播放 | 手机看片福利日韩欧美看片 | 亚洲成a人片在线播放 | 日本大胆欧美人术艺术 | 日韩在线国产精品 | 天天天天色 | 欧美中文字幕在线 | 亚洲欧美精品 | 午夜影院免费观看视频 | 亚洲欧美日韩国产精品一区 | 欧美亚洲另类久久综合 | 人人干人人上 | 天天躁天天狠天天透 | 一级黄色在线 | 青娱乐免费视频 | 诱惑网综合 | 天天噜夜夜噜 |