在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何快速掌握Java的性能調(diào)優(yōu)技巧

Wildesbeast ? 來源:今日頭條 ? 作者:zhisheng的blog ? 2020-02-22 15:44 ? 次閱讀

大多數(shù)開發(fā)者認為性能優(yōu)化是一個復雜的話題,它需要大量的工作經(jīng)驗和相關(guān)知識理論。好吧,這也不完全錯。

優(yōu)化一個應(yīng)用做到性能最優(yōu)化可能不是件容易的任務(wù),但是這并不意味著你沒有相關(guān)的知識就什么也做不了。這里有一些易于遵循的建議和最佳實踐可以幫助你創(chuàng)建一個性能良好的應(yīng)用程序。

這些建議的大部分都是針對 Java 語言的。但是也有一些是跟語言無關(guān)的,你可以運用到任意的應(yīng)用和程序中。在我們學習特定的 Java 編程性能調(diào)優(yōu)之前,先來探討一些通用的技巧。

1. 在明確必要之前別急著優(yōu)化

這可能是最重要的性能優(yōu)化技巧之一。你應(yīng)該遵循常見的最佳實踐做法并在案例中高效地應(yīng)用它。但是這并不意味在證明必要之前,你應(yīng)該更換任何標準庫或構(gòu)建復雜的優(yōu)化。

多數(shù)情況下,過早地優(yōu)化會占用大量的時間,而且會使代碼變得難以理解和閱讀。更糟糕的是,這些優(yōu)化通常并沒帶來任何好處,因為你花了大量的時間在優(yōu)化應(yīng)用中的非關(guān)鍵部分。

那么,要怎么證明東西需要優(yōu)化呢?

首先,你需要定義你的代碼速度得多快。例如,為所有 API 調(diào)用指定最大響應(yīng)時間,或者指定在特定時間范圍內(nèi)要導入的記錄數(shù)量。在做完這些后,你需要確定你應(yīng)用中哪些部分太慢需要改進。當完成這些后,你就可以來看看第二個技巧提示。

2. 使用分析器找到真正的瓶頸

在完成第一部分的優(yōu)化建議以鑒別出你應(yīng)用中需要提升的部分后,要從哪里入手呢?

你可以有兩種途徑來解決這個問題:

查看你的代碼,從看起來可疑的或者你覺得可能會導致出現(xiàn)問題的地方入手。

或者使用分析器獲取代碼每個部分的行為(執(zhí)行過程)和性能的詳細信息。

希望我不需要解釋為什么應(yīng)該始終遵循第二種途徑/方法的原因。

很顯然,基于分析器的方式可以讓你更好地理解代碼的性能影響,并允許你去專注于更關(guān)鍵的部分(代碼)。即使你曾經(jīng)使用過分析器,你一定記得你曾經(jīng)多么驚訝于一下就找到了代碼的哪些部分產(chǎn)生了性能問題。我第一次的猜測不止一次地導致我走錯了方向。

3. 為整個應(yīng)用程序創(chuàng)建一個性能測試套件

這是另一個通用的可以幫助你避免在將性能改進部署到產(chǎn)品中之后經(jīng)常會發(fā)生的許多意外問題的技巧。你應(yīng)該總是定義一個性能測試套件來測試整個應(yīng)用程序,并在性能改進之前和之后運行它。

這些額外的測試運行將幫助你識別你的改動所引起的功能和性能上的副作用,并確保不會導致弊大于利的更新。如果你處理的是被應(yīng)用程序的多個不同部分使用的組件,如數(shù)據(jù)庫或緩存,那這一點尤為重要。

4. 優(yōu)先關(guān)注最大瓶頸

在創(chuàng)建了測試套件并使用分析器分析你的應(yīng)用程序之后,你可以列出一系列需要解決以提高性能的問題列表。這很好,但這并沒有回答你需要從哪里開始的問題。你可以專注于速成方案,或從最重要的問題開始。

速成方案一開始可能會很有吸引力,因為你可以很快顯示第一個成果。但有時,可能有必要說服其他團隊成員或管理層認為性能分析是值得的。

一般來說,我建議從頂層開始,首先開始處理最重要的性能問題。這將為你提供最大的性能改進,而且你可能僅需要解決這些問題中的一小部分就能滿足你的性能要求。

常見的通用調(diào)優(yōu)技巧到此結(jié)束。接下來讓我們仔細看看一些特定于 Java 的技巧。

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

在 Java 中有很多不同的選項來連接字符串。例如,你可以使用簡單的 + 或 + = ,以及老的 StringBuffer 或 StringBuilder 。

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

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

你只需要實例化一個新的 StringBuilder 并調(diào)用append方法來向String中添加一個新的部分。在你添加完了所有的部分后,你可以調(diào)用toString方法來檢索已連接的字符串。下面的代碼片段展示了一個簡單的例子。

在每次迭代期間,該循環(huán)將 i 轉(zhuǎn)換為一個 String ,并將其與空格一起添加到 StringBuilder sb 中。所以,最后,這段代碼在日志文件中寫入 “This is a test0 1 2 3 4 5 6 7 8 9” 。

StringBuilder sb = new StringBuilder(“This is a test”);for (int i=0; i<10; i++) { sb.append(i); sb.append(” “); } log.info(sb.toString);

正如你在代碼片段中看到的。我們可以為字符串的第一個元素提供到構(gòu)造函數(shù)中。這會創(chuàng)建一個 StringBuilder ,其中包含了你所提供的字符串以及 16 個額外字符的容量。當你向 StringBuilder 中添加更多字符時,你的 JVM 將動態(tài)的增加 StringBuilder 的大小。

如果你已經(jīng)知道字符串將包含多少個字符,則可以將該數(shù)字提供給不同的構(gòu)造方法以實例化具有指定容量的 StringBuilder 。這進一步提高了效率,因為它不需要動態(tài)擴展其容量。

6. 盡可能使用基本類型

避免任何開銷并提高應(yīng)用程序性能的另一種簡便快速的方法是使用基本類型而不是其包裝類。所以,最好使用 int 而不是 Integer ,是 double 而不是 Double 。這將使得你的 JVM 將值存儲在堆棧而不是堆中,以減少內(nèi)存消耗,并更有效地處理它。

7. 盡量避免大整數(shù)和小數(shù)

由于我們已經(jīng)在討論數(shù)據(jù)類型,所以我們也應(yīng)該快速瀏覽大整數(shù)和小數(shù)。尤其是后者因其精確性而受歡迎。但這是有代價的。大整數(shù)和小數(shù)比一個簡單的 long 型或 double 型需要更多的內(nèi)存,并會顯著減慢所有的運算。所以,如果你需要額外的精度,或者如果你的數(shù)字超出一個較長的范圍,最好要三思。這可能是你需要更改并解決性能問題的唯一方法,尤其是在實現(xiàn)數(shù)學算法時。

8. 使用 Apache Commons StringUtils.Replace 而不是 String.replace

一般來說,String.replace 方法可以正常工作,并且效率很高,尤其是在你使用 Java 9 的情況下。但是,如果你的應(yīng)用程序需要大量的替換操作,并且沒有更新到最新的 Java 版本,那么檢查更快和更有效的替代品依然是有必要的。

有一種候選方案是 Apache Commons Lang 的 StringUtils.replace 方法。正如 Lukas Eder 在他最近的一篇博客文章中所描述的,它遠遠勝過了 Java 8 的 String.replace 方法。

而且它只需要很小的改動。你只需要將 Apache Commons Lang 項目的 Maven 依賴項添加到你的應(yīng)用程序的 pom.xml 中,并將 String.replacemethod 的所有調(diào)用替換為 StringUtils.replace 方法。

// replace this test.replace(“test”, “simple test”); // with this StringUtils.replace(test, “test”, “simple test”);

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

緩存是避免重復執(zhí)行昂貴或常用代碼片段的流行解決方案。總的思路很簡單:重復使用這些資源比創(chuàng)建一個新的資源更劃算。

一個典型的例子是緩存池中的數(shù)據(jù)庫連接。新連接的創(chuàng)建需要時間,如果你重用現(xiàn)有連接,則可以避免這種情況。

你也可以在 Java 語言源碼中找到其他的例子。例如,在 Integer 類中的 valueOf 方法緩存了介于 -128 到 127 之間的值。你可能會說創(chuàng)建一個新的 Integer 并不是太昂貴,但是由于它經(jīng)常被使用,因此緩存最常用的值也可以提供性能優(yōu)勢。

但是,當你考慮使用緩存時,請記住緩存實現(xiàn)也會產(chǎn)生開銷。你需要花費額外的內(nèi)存來儲存可重復使用的資源,因此你可能需要管理你的緩存以使資源可訪問,并刪除過期的資源。

所以,在開始緩存任何資源之前,請確保它們是經(jīng)常使用的,以超過緩存實現(xiàn)的開銷(代價)。

總結(jié)

正如你所看到的,有時不需要太多的工作就可以提高你的應(yīng)用程序的性能。本文中的大部分建議只需要稍作努力就可以將它們應(yīng)用于你的代碼中。

但還是那句話,最重要的還是那些與是什么編程語言無關(guān)的技巧:

在你知道其必要性之前不要進行優(yōu)化

使用分析器(profiler)來查找真正的瓶

優(yōu)先處理最大的瓶頸

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2986

    瀏覽量

    107031
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1563

    瀏覽量

    63587
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70303
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù)

    在高并發(fā)網(wǎng)絡(luò)服務(wù)場景中,Linux內(nèi)核的默認網(wǎng)絡(luò)參數(shù)往往無法滿足需求,導致性能瓶頸、連接超時甚至服務(wù)崩潰。本文基于真實案例分析,從參數(shù)解讀、問題診斷到優(yōu)化實踐,手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù),支撐百萬級并發(fā)連接。
    的頭像 發(fā)表于 05-29 09:21 ?125次閱讀

    xgboost超參數(shù)調(diào)優(yōu)技巧 xgboost在圖像分類中的應(yīng)用

    的成績。然而,XGBoost模型涉及眾多超參數(shù),這些參數(shù)的組合和調(diào)優(yōu)對于模型性能至關(guān)重要。以下是一些XGBoost超參數(shù)調(diào)優(yōu)的技巧: 理解主
    的頭像 發(fā)表于 01-31 15:16 ?1069次閱讀

    MCF8316A調(diào)優(yōu)指南

    電子發(fā)燒友網(wǎng)站提供《MCF8316A調(diào)優(yōu)指南.pdf》資料免費下載
    發(fā)表于 11-20 17:21 ?2次下載
    MCF8316A<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>指南

    MCT8316A調(diào)優(yōu)指南

    電子發(fā)燒友網(wǎng)站提供《MCT8316A調(diào)優(yōu)指南.pdf》資料免費下載
    發(fā)表于 11-13 13:49 ?0次下載
    MCT8316A<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>指南

    MCT8315A調(diào)優(yōu)指南

    電子發(fā)燒友網(wǎng)站提供《MCT8315A調(diào)優(yōu)指南.pdf》資料免費下載
    發(fā)表于 11-12 14:14 ?1次下載
    MCT8315A<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>指南

    MMC DLL調(diào)優(yōu)

    電子發(fā)燒友網(wǎng)站提供《MMC DLL調(diào)優(yōu).pdf》資料免費下載
    發(fā)表于 10-11 11:48 ?0次下載
    MMC DLL<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>

    TDA3xx ISS調(diào)優(yōu)和調(diào)試基礎(chǔ)設(shè)施

    電子發(fā)燒友網(wǎng)站提供《TDA3xx ISS調(diào)優(yōu)和調(diào)試基礎(chǔ)設(shè)施.pdf》資料免費下載
    發(fā)表于 10-11 10:16 ?0次下載
    TDA3xx ISS<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>和調(diào)試基礎(chǔ)設(shè)施

    大數(shù)據(jù)從業(yè)者必知必會的Hive SQL調(diào)優(yōu)技巧

    大數(shù)據(jù)從業(yè)者必知必會的Hive SQL調(diào)優(yōu)技巧 摘要 :在大數(shù)據(jù)領(lǐng)域中,Hive SQL被廣泛應(yīng)用于數(shù)據(jù)倉庫的數(shù)據(jù)查詢和分析。然而,由于數(shù)據(jù)量龐大和復雜的查詢需求,Hive SQL查詢的性能往往
    的頭像 發(fā)表于 09-24 13:30 ?627次閱讀

    智能調(diào)優(yōu),使步進電機安靜而高效地運行

    電子發(fā)燒友網(wǎng)站提供《智能調(diào)優(yōu),使步進電機安靜而高效地運行.pdf》資料免費下載
    發(fā)表于 09-24 11:08 ?1次下載
    智能<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>,使步進電機安靜而高效地運行

    MMC SW調(diào)優(yōu)算法

    電子發(fā)燒友網(wǎng)站提供《MMC SW調(diào)優(yōu)算法.pdf》資料免費下載
    發(fā)表于 09-20 11:14 ?0次下載
    MMC SW<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>算法

    如何調(diào)優(yōu)DS160PR410實現(xiàn)出色的信號完整性

    電子發(fā)燒友網(wǎng)站提供《如何調(diào)優(yōu)DS160PR410實現(xiàn)出色的信號完整性.pdf》資料免費下載
    發(fā)表于 09-20 09:39 ?6次下載
    如何<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>DS160PR410實現(xiàn)出色的信號完整性

    TAS58xx系列通用調(diào)優(yōu)指南

    電子發(fā)燒友網(wǎng)站提供《TAS58xx系列通用調(diào)優(yōu)指南.pdf》資料免費下載
    發(fā)表于 09-14 10:49 ?1次下載
    TAS58xx系列通用<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>指南

    AM6xA ISP調(diào)優(yōu)指南

    電子發(fā)燒友網(wǎng)站提供《AM6xA ISP調(diào)優(yōu)指南.pdf》資料免費下載
    發(fā)表于 09-07 09:52 ?0次下載
    AM6xA ISP<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>指南

    如何進行TI PCIe Gen5轉(zhuǎn)接驅(qū)動器調(diào)優(yōu)

    電子發(fā)燒友網(wǎng)站提供《如何進行TI PCIe Gen5轉(zhuǎn)接驅(qū)動器調(diào)優(yōu).pdf》資料免費下載
    發(fā)表于 09-03 11:31 ?0次下載
    如何進行TI PCIe Gen5轉(zhuǎn)接驅(qū)動器<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>

    OSPI控制器PHY調(diào)優(yōu)算法

    電子發(fā)燒友網(wǎng)站提供《OSPI控制器PHY調(diào)優(yōu)算法.pdf》資料免費下載
    發(fā)表于 08-30 11:12 ?0次下載
    OSPI控制器PHY<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>算法
    主站蜘蛛池模板: 欧美成人亚洲欧美成人 | 久久综合一 | 天天操天天射天天爽 | 色婷综合 | 国产精品自在线天天看片 | 欧美成人精品一区二区 | 污污的黄色小说 | 色婷五月综激情亚洲综合 | 国产在线一区视频 | 1024成人 | 伊人网在线视频观看 | 成人区精品一区二区毛片不卡 | 日本免费色视频 | 色成人在线 | 国产精选经典三级小泽玛利亚 | 两性色午夜视频免费老司机 | 国内免费视频成人精品 | 精品一区二区影院在线 | 国产男女怕怕怕免费视频 | 俺去啦最新网址 | 夜夜五月天 | 黑色丝袜美美女被躁视频 | 一级做a爰片久久毛片免费看 | 日日夜夜操天天干 | 日本不卡一区二区三区在线观看 | 67pao强力打造 | 噜噜噜色噜噜噜久久 | 免费抓胸吻胸激烈视频网站 | 三级毛片免费观看 | 国产精品视频久久久久久 | 深夜在线视频免费网址 | 91视频免费网站 | 女人本色高清在线观看wwwwww国产 | 伊人成人在线观看 | 三级毛片免费观看 | 亚洲成人在线网站 | 国产午夜剧场 | eeuss秋霞成人影院 | 国产日本久久久久久久久婷婷 | 免费中国jlzzjlzz在线播放 | 亚洲国产成人久久精品影视 |