如何提升Java程序性能?
想要提高java程序性能,可以從下面幾個方面考慮:
1、java代碼盡量最優(yōu)化這點可能說得容易,做起來難。因為需要大量的編碼經(jīng)驗和大量的編碼時間總結(jié)才能達到,一個比較快的方式就是從別人的經(jīng)驗中汲取可用的知識,站在巨人的肩膀上。
例如:
影響Java代碼性能的一些細節(jié):Integer和 int的區(qū)別、StringBuilder和Stringbuffer的區(qū)別、ArrayList和LinkedList的區(qū)別等等太多了。
代碼優(yōu)化的總結(jié):避免在循環(huán)條件中使用復雜表達式、為'Vectors' 和 'Hashtables'定義初始大小、在finally塊中關(guān)閉Stream、使用'System.arraycopy ()'代替通過來循環(huán)復制數(shù)組、讓訪問實例內(nèi)變量的getter/setter方法變成”final”、避免不需要的instanceof操作、避免不需要的造型操作、如果只是查找單個字符的話,用charAt()代替startsWith()、使用移位操作來代替'a / b'操作、在字符串相加的時候,使用 ' ' 代替 " ",如果該字符串只有一個字符的話、不要在循環(huán)中調(diào)用synchronized(同步)方法、將try/catch塊移出循環(huán)、對于boolean值,避免不必要的等式判斷、對于常量字符串,用'String' 代替 'StringBuffer'、用'StringTokenizer' 代替 'indexOf()' 和'substring()'、使用條件操作符替代"if (cond) return; else return;" 結(jié)構(gòu)、使用條件操作符代替"if (cond) a = b; else a = c;" 結(jié)構(gòu)、不要在循環(huán)體中實例化變量、確定 StringBuffer的容量、盡可能的使用棧變量、不要總是使用取反操作符(!)、與一個接口 進行instanceof操作、使用數(shù)據(jù)庫連接池和線程池、使用同步代碼塊替代同步方法、不要讓public方法中有太多的形參、不要將數(shù)組聲明為public static final、及時關(guān)閉流、及時清除不再需要的會話、公用的集合類中不使用的數(shù)據(jù)一定要及時remove掉等等還有很多。
2、進行大量的性能測試在編碼中,對于自己已知的性能問題,往往都可以避免。然而一個人很難記住所有的可能存在的問題,即潛在的bug,這個時候就需要做大量的準確的性能測試,不斷的進行調(diào)優(yōu)復測。
java程序往往在單獨運行的時候沒有問題,到了線上大批量用戶訪問的時候就會出現(xiàn)許多性能瓶頸,影響用戶體驗。所以在上線前進行性能測試尤為重要,而開發(fā)人員想要自己代碼盡量少的測出性能問題,就需要在代碼提交前,自行進行性能測試。對自己代碼中,涉及到并發(fā)的地方,進行壓測,模擬大量用戶訪問的情況,提前解決性能瓶頸。
3、進行適當?shù)漠惓y試除了要進行性能測試外,異常測試也非常重要。對于java程序而言,可能會發(fā)生許多意想不到的異常,然而當異常發(fā)生時再去處理已為時過晚,所以我們需要再代碼上線前,盡量做到充分的異常測試,對于各種可能發(fā)生的異常進行模擬,提前準備對策,不打沒有準備的仗。這樣才能更好的保證代碼的性能和質(zhì)量。