• 招生咨詢熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢熱線
4008-569-579
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料 > Java培訓(xùn):7個(gè)簡(jiǎn)單的Java性能調(diào)優(yōu)技巧
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料>Java培訓(xùn):7個(gè)簡(jiǎn)單的Java性能調(diào)優(yōu)技巧

Java培訓(xùn):7個(gè)簡(jiǎn)單的Java性能調(diào)優(yōu)技巧

來(lái)源:廣州達(dá)內(nèi)教育        時(shí)間:2023-05-30        熱度:23℃        返回列表

  大多數(shù)開發(fā)人員都認(rèn)為性能優(yōu)化是一個(gè)復(fù)雜的主題,需要大量的經(jīng)驗(yàn)和知識(shí)。優(yōu)化應(yīng)用程序以獲得最佳性能并非易事。有幾個(gè)易于遵循的建議和最佳實(shí)踐可幫助你創(chuàng)建性能良好的應(yīng)用程序,這些建議中的大多數(shù)是特定于Java的。感興趣的同學(xué)可以參加java培訓(xùn),你可以學(xué)會(huì)更多的java性能優(yōu)化技巧。


  1.使用StringBuilder以編程方式連接字符串


  在Java中有很多不同的連接字符串的選項(xiàng)。例如,你可以使用簡(jiǎn)單的+或+=、良好的舊StringBuffer或StringBuilder。


  那么,你應(yīng)該選擇哪種方法?


  答案取決于連接字符串的代碼。如果以編程方式向字符串添加新內(nèi)容,例如在for循環(huán)中,則應(yīng)使用StringBuilder。它易于使用,并提供比StringBuffer更好的性能。但請(qǐng)記住,與StringBuffer相比,StringBuilder不是線程安全的,可能不適合所有用例。


  你只需要實(shí)例化一個(gè)新的StringBuilder并調(diào)用append方法向字符串中添加一個(gè)新的部分。添加完所有部分后,可以調(diào)用toString()方法來(lái)檢索連接的字符串。


  如果你已經(jīng)知道字符串將包含多少個(gè)字符,則可以將該數(shù)字提供給不同的構(gòu)造函數(shù)方法,以實(shí)例化具有定義容量的StringBuilder。這將進(jìn)一步提高其效率,因?yàn)樗恍枰獎(jiǎng)討B(tài)擴(kuò)展其容量。


  2.使用+在一條語(yǔ)句中連接字符串


  當(dāng)你用Java實(shí)現(xiàn)第一個(gè)應(yīng)用程序時(shí),可能有人告訴你不應(yīng)該將字符串與+。如果在應(yīng)用程序邏輯中連接字符串,這是正確的。字符串是不可變的,每個(gè)字符串連接的結(jié)果都存儲(chǔ)在一個(gè)新的字符串對(duì)象中。這需要額外的內(nèi)存并降低應(yīng)用程序的速度,尤其是在循環(huán)中連接多個(gè)字符串時(shí)。在這些情況下,你應(yīng)該遵循第一條技巧并使用StringBuilder。想要學(xué)習(xí)java更多知識(shí)和技能,可以考慮參加java培訓(xùn),有經(jīng)驗(yàn)豐富的專業(yè)講師指導(dǎo)教學(xué),有緊跟市場(chǎng)需求的實(shí)時(shí)課程,可以讓你快速掌握這門技術(shù),節(jié)約時(shí)間,少走彎路。




  但如果你只是將一個(gè)字符串拆分為多行以提高代碼的可讀性,則情況并非如此。在這些情況下,你應(yīng)該使用簡(jiǎn)單的+連接字符串。Java編譯器將對(duì)此進(jìn)行優(yōu)化,并在編譯時(shí)執(zhí)行連接。因此,在運(yùn)行時(shí),你的代碼將只使用1個(gè)字符串,不需要串聯(lián)。


  3.盡可能使用Primitives


  另一種避免任何開銷并提高應(yīng)用程序性能的快速簡(jiǎn)便方法是使用Primitives而不是它們的包裝類。所以,最好用int代替整數(shù),或者用double代替double。這允許JVM將值存儲(chǔ)在堆棧中而不是堆中,以減少內(nèi)存消耗并更有效地處理它。


  4.盡量避免使用BigInteger和BigDecimal


  BigInteger和BigDecimal比簡(jiǎn)單的long或double需要更多的內(nèi)存,大大降低了所有計(jì)算的速度。因此,如果你需要額外的精度,或者如果你的數(shù)字將超過(guò)一個(gè)很長(zhǎng)的范圍,最好三思而后行。這可能是解決性能問(wèn)題所需的唯一更改,尤其是在實(shí)現(xiàn)數(shù)學(xué)算法的情況下。


  5.首先檢查當(dāng)前日志級(jí)別


  這個(gè)建議應(yīng)該是顯而易見(jiàn)的,但不幸的是,你可以找到許多忽略它的代碼。在創(chuàng)建調(diào)試消息之前,應(yīng)始終首先檢查當(dāng)前日志級(jí)別。否則,你可能會(huì)在日志消息中創(chuàng)建一個(gè)字符串,該字符串將在以后被忽略。




  6.使用Apache Commons

StringUtils.Replace而不是String.Replace


  如果你的應(yīng)用程序需要大量替換操作,并且你還沒(méi)有更新到最新的Java版本,那么檢查更快、更高效的替代方案仍然是有意義的。在java培訓(xùn)中,也有關(guān)于java性能優(yōu)化技巧的學(xué)習(xí),理論知識(shí)+實(shí)踐項(xiàng)目,雙管齊下,學(xué)以致用,讓你深入淺出地學(xué)習(xí)java。


  一個(gè)候選方法是Apache Commons

Lang的StringUtils.replace方法,它的性能顯著優(yōu)于Java8的String.replace方法。它只需要一點(diǎn)小小的改變。你需要將Apache的Commons

Lang項(xiàng)目的Maven依賴項(xiàng)添加到應(yīng)用程序pom.xml中,并將String.replace方法的所有調(diào)用替換為StringUtils.replace方法。


  7.緩存昂貴的資源,如數(shù)據(jù)庫(kù)連接


  緩存是一種流行的解決方案,可以避免重復(fù)執(zhí)行昂貴或頻繁使用的代碼段。總的想法很簡(jiǎn)單:重用這樣的資源比一次又一次地創(chuàng)建新資源要便宜。


  一個(gè)典型的例子是在池中緩存數(shù)據(jù)庫(kù)連接。創(chuàng)建新連接需要時(shí)間,如果重用現(xiàn)有連接,可以避免這一點(diǎn)。你還可以在Java語(yǔ)言本身中找到其他示例。例如,Integer類的valueOf方法緩存-128和127之間的值。你可能會(huì)說(shuō),創(chuàng)建一個(gè)新的整數(shù)并不太昂貴,但它的使用非常頻繁,因此緩存最常用的值可以提供性能優(yōu)勢(shì)。


  但是當(dāng)你考慮緩存時(shí),請(qǐng)記住緩存實(shí)現(xiàn)也會(huì)產(chǎn)生開銷。你需要花費(fèi)額外的內(nèi)存來(lái)存儲(chǔ)可重用資源,并且可能需要管理緩存以使資源可訪問(wèn)或刪除過(guò)時(shí)的資源。因此,在開始緩存任何資源之前,請(qǐng)確保使用它們的頻率足以超過(guò)緩存實(shí)現(xiàn)的開銷。


  正如你所看到的,有時(shí)不需要做很多工作來(lái)提高應(yīng)用程序的性能。本文中的大多數(shù)建議只需要一點(diǎn)額外的努力就可以將它們應(yīng)用到你的代碼中。想學(xué)習(xí)java的同學(xué),建議考慮參加java培訓(xùn),進(jìn)一步提升自己,給自己增值。

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部