国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java代碼效率優化方法(推薦)

2019-11-26 13:15:04
字體:
來源:轉載
供稿:網友

1、 盡量指定類的final修飾符 帶有final修飾符的類是不可派生的。

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

2、 盡量重用對象。

特別是String 對象的使用中,出現字符串連接情況時應用StringBuffer 代替。由于系統不僅要花時間生成對象,以后可能還需花時間對這些對象進行垃圾回收和處理。因此,生成過多的對象將會給程序的性能帶來很大的影響。

3、 盡量使用局部變量,調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。

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

4、 不要重復初始化變量

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

5、 在JAVA + ORACLE 的應用系統開發中,java中內嵌的SQL語句盡量使用大寫的形式,以減輕ORACLE解析器的解析負擔。

6、 Java 編程過程中,進行數據庫連接、I/O流操作時務必小心,在使用完畢后,即使關閉以釋放資源。

因為對這些大對象的操作會造成系統大的開銷,稍有不慎,會導致嚴重的后果。

7、 由于JVM的有其自身的GC機制,不需要程序開發者的過多考慮,從一定程度上減輕了開發者負擔,但同時也遺漏了隱患,過分的創建對象會消耗系統的大量內 存,嚴重時會導致內存泄露,因此,保證過期對象的及時回收具有重要意義。

JVM回收垃圾的條件是:對象不在被引用;然而,JVM的GC并非十分的機智,即使對象滿足了垃圾回收的條件也不一定會被立即回收。所以,建議我們在對象 使用完畢,應手動置成null。

8、 在使用同步機制時,應盡量使用方法同步代替代碼塊同步。

9、 盡量減少對變量的重復計算

10、盡量采用lazy loading 的策略,即在需要的時候才開始創建。

11、慎用異常

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

12、不要在循環中使用:

Try { } catch() { } 

應把其放置在最外層。

13、StringBuffer 的使用:

StringBuffer表示了可變的、可寫的字符串。

有三個構造方法 :

StringBuffer (); //默認分配16個字符的空間
StringBuffer (int size); //分配size個字符的空間
StringBuffer (String str); //分配16個字符+str.length()個字符空間

你可以通過StringBuffer的構造函數來設定它的初始化容量,這樣可以明顯地提升性能。

這里提到的構造函數是StringBuffer(int length),length參數表示當前的StringBuffer能保持的字符數量。你也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer對象創建之后設置它的容量。首先我們看看StringBuffer的缺省行為,然后再找 出一條更好的提升性能的途徑。

StringBuffer在內部維護一個字符數組,當你使用缺省的構造函數來創建StringBuffer對象的時候,因為沒有設置初始化字符長 度,StringBuffer的容量被初始化為16個字符,也就是說缺省容量就是16個字符。

當StringBuffer達到最大容量的時候,它會將自身 容量增加到當前的2倍再加2,也就是(2*舊值+2)。

如果你使用缺省值,初始化之后接著往里面追加字符,在你追加到第16個字符的時候它會將容量增加到 34(2*16+2),當追加到34個字符的時候就會將容量增加到70(2*34+2)。

無論何事只要StringBuffer到達它的最大容量它就不得 不創建一個新的字符數組然后重新將舊字符和新字符都拷貝一遍

主站蜘蛛池模板: 察雅县| 阳原县| 迁西县| 朝阳区| 宝清县| 虎林市| 松滋市| 定西市| 扎囊县| 津南区| 墨脱县| 泰来县| 蓬莱市| 随州市| 如东县| 郑州市| 岳池县| 南投县| 从江县| 田林县| 鄯善县| 新巴尔虎右旗| 阿荣旗| 元谋县| 错那县| 汾西县| 吉隆县| 凤城市| 永善县| 容城县| 运城市| 长治县| 永春县| 彰化县| 台东市| 防城港市| 永靖县| 县级市| 屯门区| 株洲市| 铁力市|