JAVA網站開發與優化如何提高代碼運行效率

  如何提高代碼的效率。

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

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

    二、使用非阻塞I/O版本較低的JDK不支持非阻塞I/OAPI。爲避免I/O阻塞,一些應用採用了創建大量線程的辦法(在較好的情況下,會使用一個緩衝池)。這種技術可以在許多必須支持併發I/O流的應用中見到,如Web服務器、報價和拍賣應用等。然而,創建Java線程需要相當可觀的開銷。JDK1.4引入了非阻塞的I/O(java.nio)。如果應用要求使用版本較早的JDK,需要支持非阻塞I/O的軟件包。

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

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

    五、儘量指定類的final修飾符帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。爲String類指定final防止了人們覆蓋length()方法。另外,如果指定一個類爲final,則該類所有的方法都是finalJava編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%

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

    七、乘法和除法修改後的代碼不再做乘以的操作,而是改用等價的左移的操作,每左移1位相當於乘以2。相應地,右移1位操作相當於除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難於理解,所以最好加上一些註釋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章