大多數開發人員都認為性能優化是一個復雜的主題,需要大量的經驗和知識。優化應用程序以獲得最佳性能并非易事。有幾個易于遵循的建議和最佳實踐可幫助你創建性能良好的應用程序,這些建議中的大多數是特定于Java的。感興趣的同學可以參加java培訓,你可以學會更多的java性能優化技巧。
1.使用StringBuilder以編程方式連接字符串
在Java中有很多不同的連接字符串的選項。例如,你可以使用簡單的+或+=、良好的舊StringBuffer或StringBuilder。
那么,你應該選擇哪種方法?
答案取決于連接字符串的代碼。如果以編程方式向字符串添加新內容,例如在for循環中,則應使用StringBuilder。它易于使用,并提供比StringBuffer更好的性能。但請記住,與StringBuffer相比,StringBuilder不是線程安全的,可能不適合所有用例。
你只需要實例化一個新的StringBuilder并調用append方法向字符串中添加一個新的部分。添加完所有部分后,可以調用toString()方法來檢索連接的字符串。
如果你已經知道字符串將包含多少個字符,則可以將該數字提供給不同的構造函數方法,以實例化具有定義容量的StringBuilder。這將進一步提高其效率,因為它不需要動態擴展其容量。
2.使用+在一條語句中連接字符串
當你用Java實現第一個應用程序時,可能有人告訴你不應該將字符串與+。如果在應用程序邏輯中連接字符串,這是正確的。字符串是不可變的,每個字符串連接的結果都存儲在一個新的字符串對象中。這需要額外的內存并降低應用程序的速度,尤其是在循環中連接多個字符串時。在這些情況下,你應該遵循第一條技巧并使用StringBuilder。想要學習java更多知識和技能,可以考慮參加java培訓,有經驗豐富的專業講師指導教學,有緊跟市場需求的實時課程,可以讓你快速掌握這門技術,節約時間,少走彎路。
但如果你只是將一個字符串拆分為多行以提高代碼的可讀性,則情況并非如此。在這些情況下,你應該使用簡單的+連接字符串。Java編譯器將對此進行優化,并在編譯時執行連接。因此,在運行時,你的代碼將只使用1個字符串,不需要串聯。
3.盡可能使用Primitives
另一種避免任何開銷并提高應用程序性能的快速簡便方法是使用Primitives而不是它們的包裝類。所以,最好用int代替整數,或者用double代替double。這允許JVM將值存儲在堆棧中而不是堆中,以減少內存消耗并更有效地處理它。
4.盡量避免使用BigInteger和BigDecimal
BigInteger和BigDecimal比簡單的long或double需要更多的內存,大大降低了所有計算的速度。因此,如果你需要額外的精度,或者如果你的數字將超過一個很長的范圍,最好三思而后行。這可能是解決性能問題所需的唯一更改,尤其是在實現數學算法的情況下。
5.首先檢查當前日志級別
這個建議應該是顯而易見的,但不幸的是,你可以找到許多忽略它的代碼。在創建調試消息之前,應始終首先檢查當前日志級別。否則,你可能會在日志消息中創建一個字符串,該字符串將在以后被忽略。
6.使用Apache Commons StringUtils.Replace而不是String.Replace
如果你的應用程序需要大量替換操作,并且你還沒有更新到最新的Java版本,那么檢查更快、更高效的替代方案仍然是有意義的。在java培訓中,也有關于java性能優化技巧的學習,理論知識+實踐項目,雙管齊下,學以致用,讓你深入淺出地學習java。
一個候選方法是Apache Commons Lang的StringUtils.replace方法,它的性能顯著優于Java8的String.replace方法。它只需要一點小小的改變。你需要將Apache的Commons Lang項目的Maven依賴項添加到應用程序pom.xml中,并將String.replace方法的所有調用替換為StringUtils.replace方法。
7.緩存昂貴的資源,如數據庫連接
緩存是一種流行的解決方案,可以避免重復執行昂貴或頻繁使用的代碼段。總的想法很簡單:重用這樣的資源比一次又一次地創建新資源要便宜。
一個典型的例子是在池中緩存數據庫連接。創建新連接需要時間,如果重用現有連接,可以避免這一點。你還可以在Java語言本身中找到其他示例。例如,Integer類的valueOf方法緩存-128和127之間的值。你可能會說,創建一個新的整數并不太昂貴,但它的使用非常頻繁,因此緩存最常用的值可以提供性能優勢。
但是當你考慮緩存時,請記住緩存實現也會產生開銷。你需要花費額外的內存來存儲可重用資源,并且可能需要管理緩存以使資源可訪問或刪除過時的資源。因此,在開始緩存任何資源之前,請確保使用它們的頻率足以超過緩存實現的開銷。
正如你所看到的,有時不需要做很多工作來提高應用程序的性能。本文中的大多數建議只需要一點額外的努力就可以將它們應用到你的代碼中。想學習java的同學,建議考慮參加java培訓,進一步提升自己,給自己增值。