<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sinoly

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      29 隨筆 :: 76 文章 :: 189 評論 :: 0 Trackbacks
    “通用篇”討論的問題適合于大多數(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的軟件包。

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


    posted on 2007-02-02 08:59 sinoly 閱讀(335) 評論(0)  編輯  收藏 所屬分類: java技術(shù)
    主站蜘蛛池模板: 亚洲AV性色在线观看| 亚洲人成电影青青在线播放| 黄色网址大全免费| 国产99视频免费精品是看6| 亚洲欧美日韩一区二区三区| 扒开双腿猛进入爽爽免费视频 | 国产成人综合久久精品亚洲| 尤物永久免费AV无码网站| 亚洲大码熟女在线观看| 四虎国产精品免费久久影院| 黄色三级三级免费看| 亚洲午夜福利精品无码| 丁香花在线视频观看免费| 亚洲久本草在线中文字幕| 黄瓜视频影院在线观看免费| 亚洲精华国产精华精华液| 亚洲精品线路一在线观看| 国产真人无码作爱视频免费| 亚洲黄色免费网站| 久久综合AV免费观看| 看成年女人免费午夜视频| 亚洲尤码不卡AV麻豆| 亚洲成人在线免费观看| 精品久久久久久久久亚洲偷窥女厕| 亚洲国产精品无码久久久久久曰| 国产又黄又爽胸又大免费视频 | 久久久久亚洲AV无码麻豆| 成人免费大片免费观看网站| 国产精品亚洲AV三区| 不卡精品国产_亚洲人成在线 | 亚洲精品人成网线在线播放va| www.亚洲精品| 特级无码毛片免费视频尤物| 亚洲高清中文字幕免费| 免费萌白酱国产一区二区| 久久国产乱子伦精品免费不卡| 成人亚洲国产va天堂| 亚洲日韩国产成网在线观看| 99视频在线看观免费| 亚洲国产成人无码AV在线| 中文字幕第13亚洲另类|