剛在網上看到一篇關於Java性能調優的帖子,很是幫助,自己也用了十多年JAVA了,有些感同身受,這裡 引用那帖子結合自己的感受來談下
技巧1:盡量少用new來創建對象
因為用new來創建對象的實例時 ,構造函數鏈上的所有構造函數都會被依次調用,導致效率很低。其實我們可以用一些小技巧,比如復用已有 對象。比如說,一個類如果實現了Cloneable接口的話,可以調用這個類的對象的clone()方法來創建一個新 對象,這樣的對象不會調用任何類的構造函數。所以,這樣生成新對象的速度比調用任何類的構造函數要來的 快。
技巧2:盡量使用局部變量
如果學會JAVA虛擬機原理的話都知道,在調用方法的時候,傳 遞的參數以及調用的時候創建的臨時變量都是保存在棧(stack)上的,這種變量的創建速度快。而靜態變量 ,實例變量,都是創建在堆(heap)上的,這種變量的創建速度慢。
技巧3:盡量減少方法調用
面向對象提成盡量用方法調用來間接的訪問變量,而不是希望直接訪問變量,但是方法調用會有壓棧退棧等操 作,從而會影響方法效率。比如說用setter和getter來訪問變量比直接訪問變量的效率就低很多,但是往往用 方法來訪問變量更加有可讀性,所以我們應該在可讀性和效率之間進行權衡
技巧4:盡量使用 static,final,private
因為如果類級別被修飾為final,那麼這個類是不可被繼承的,類中的所有方法 也不可以被繼承的。那麼編譯器會進行優化,將其方法進行內聯,來提高效率。在方法級,如果某個方法被修 飾為static,final,private,則是不可以被覆蓋,所以JAVA無需要動態關聯,從而提高了效率
技巧5: 讓setter/getter也成為final
同樣,這樣做的目的就是讓編譯器知道這個方法是不可以被覆蓋,從而 將其轉為inline來提高效率。
技巧6:不要不必要的類轉型
比如A是B的父類,那麼從B到A就不 用轉型了。
技巧7:盡量重用String對象
比如對於字符串進行連接,操作時候,可以用 StringBuffer/StringBuilder來代替String ,因為String對象連接,操作會產生大量的新String對象,而系 統不僅要花費時間生成這些對象,還要最後對這些新生成的對象進行垃圾回收和清理。
技巧8:別過分 創建