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

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

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

  “通用篇”討論的問題適合于大多數Java應用。

   1.1 不用new關鍵詞創建類的實例

   用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable接口,我們可以調用它的clone()方法。clone()方法不會調用任何類構造函數。

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

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

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

   1.2 使用非阻塞I/O

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

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

   請參見Sun中國網站的《調整Java的I/O性能》。

   1.3 慎用異常

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

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

   1.4 不要重復初始化變量

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

   1.5 盡量指定類的final修飾符

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

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

   1.6 盡量使用局部變量

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

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




主站蜘蛛池模板: 日韩在线免费观看视频 | 亚洲91在线视频 | 午夜影院在线观看免费 | 天堂资源在线最新版 | 中文字幕精品亚洲无线码二区 | 青青草香蕉 | 亚洲四虎 | 青青草视频在线观看 | 天天射日| 日日搞夜夜操 | 欧美一级黄色片子 | 一区二区三区国产美女在线播放 | 中文字幕在线视频精品 | 中文字幕欧美日韩久久 | 日韩视频亚洲 | 日韩深夜视频 | 亚洲免费在线观看视频 | 欧美在线高清视频播放免费 | 色播五月激情五月 | 片子免费在线观看 | 四虎影视成人永久在线播放 | 亚洲成人社 | 日韩欧美一区二区三区久久 | 亚洲欧美中文日韩在线v日本 | 天堂资源在线中文 | 图片亚洲va欧美va国产综合 | 欧美视频在线免费播放 | 欧美无人区码卡二三卡四卡 | 午夜一级福利 | 在线看欧美成人中文字幕视频 | 三级自拍| 三级黄色免费片 | 狍和美女一级aa毛片 | 天堂伦理片 | 色护士综合 | 深夜视频在线看 | 人人入人人爱 | 中文字幕高清免费不卡视频 | 日本邪恶全彩 | 青青青青青青青青草 | 亚洲图片欧美另类 |