讀Java性能權威指南(第2版)筆記26_性能測試方法下

来源:https://www.cnblogs.com/lying7/archive/2023/03/24/17245243.html
-Advertisement-
Play Games

1. 理解可變性 1.1. 理解測試結果如何隨時間變化 1.2. 可以通過多次運行測試後取平均值來解決 1.3. 因代碼改進而進行的測試叫作回歸測試(regression testing) 1.3.1. 原本的代碼叫作基線(baseline) 1.3.2. 新的代碼叫作樣本(specimen) 1. ...


1. 理解可變性

1.1. 理解測試結果如何隨時間變化

1.2. 可以通過多次運行測試後取平均值來解決

1.3. 因代碼改進而進行的測試叫作回歸測試(regression testing)

  • 1.3.1. 原本的代碼叫作基線(baseline)

  • 1.3.2. 新的代碼叫作樣本(specimen)

1.4. 結果的變化越大,越難判斷平均值的差異是由於真正的性能問題還是隨機變化

1.5. 正確判斷兩個測試的結果是否有差異需要進行一定程度的統計分析,以確保感知到的差異不是隨機波動造成的

  • 1.5.1. 要進行嚴謹的統計分析,可以使用T檢驗比較測試結果

  • 1.5.2. 檢驗的結果表示出現性能倒退的概率,但是它並不能顯示出哪些倒退應該忽略,哪些應該追蹤。在這兩者間找到平衡是一種性能工程藝術

2. 早測試、常測試

2.1. 性能測試作為開發周期中的必要部分

2.2. 早期測試帶來的問題

  • 2.2.1. 受發佈時間的限制,開發人員需要儘快檢入代碼

  • 2.2.2. 代碼的性能特征會隨著代碼的變化而變化

2.3. 自動化一切

  • 2.3.1. 所有的性能測試都應該腳本化(或者程式化,不過腳本化通常更容易)

2.4. 測量一切

  • 2.4.1. 自動化必須收集可以想到的每一份數據,以便用於以後的分析

2.5. 在目標系統上運行

  • 2.5.1. 很多重要的調優標誌會基於JVM運行的底層硬體系統,計算出它們的預設值

  • 2.5.2. 不同平臺的代碼編譯方式不同

  • 2.5.3. 軟體緩存和更重要的硬體緩存,在不同的系統和不同的負載下的表現也不同

3. jmh提供微基準測試

3.1. 適用於納(nano)/微(micro)/毫(milli)/巨集(macro)等規模的基準測試

3.2. 隨著Java 9一起發佈的

  • 3.2.1. 組成jmh的類庫相容JDK 8及之後的版本

  • 3.2.2. 並沒有與任何具體的Java版本綁定

  • 3.2.3. JDK中沒有支持jmh的工具

3.3. Blackhole類是jmh的特性

  • 3.3.1. 解決了微基準測試的一個重要問題:如果一個操作的值沒有用到,那麼編譯器會直接優化這個操作

  • 3.3.2. 所以把值傳遞給Blackhole的consume()方法可以確保值被使用

3.4. Setup註解的Level值

  • 3.4.1. Level.Trial

    • 3.4.1.1. 在基準測試代碼初始化時執行一次
  • 3.4.2. Level.Iteration

    • 3.4.2.1. 在基準測試每次迭代前完成(每個測量期)
  • 3.4.3. Level.Invocation

    • 3.4.3.1. 在每次測試方法執行之前完成

3.5. -f 5

  • 3.5.1. 派生試驗的運行次數(預設為5)

3.6. -wi 5

  • 3.6.1. 每次試驗的預熱迭代次數(預設為5)

3.7. -i 5

  • 3.7.1. 每次試驗的測量迭代次數(預設為5)

3.8. -r 10

  • 3.8.1. 每次迭代的最少時間(以秒為單位)

  • 3.8.2. 迭代的時間可能比這個時間長,具體取決於目標方法的實際執行時間

3.9. 對於更穩定的測試,降低這些參數的值一般可以縮短運行測試所需的時間

3.10. 通常讓Java代碼變得更好、更快的方法是寫出更好的演算法,但這個實現與任何Java調優實踐或者Java編碼實踐無關


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <template> <el-button style="float: right; margin: 10px" type="primary" @click="export2">導出</el-button> <!-- 導出表格 start--> <el-table class="tableExpor ...
  • const: 這個最簡單,只需記住是聲明的常量,定義的時候必須聲明const的具體值,且之後不允許改變const的值 var和let區別 1、由於js引擎存在預解析,會把var變數名進行提升 對於var來說是這樣執行的 var m; console.log(m); m=10; let不存在變數提升, ...
  • ### canvas特性 標簽中的文本只有在瀏覽器下支持canvas標簽時才顯示 行內塊元素 高度設置在標簽屬性上 ### 填充色設置 ctx.fillStyle="#ff0000" ### 線條顏色設置 ctx.strokeStyle="ff0000" ### 線條粗細 ctx.lineWidth ...
  • 備忘錄模式(Memento Pattern):是一種行為型設計模式,在不破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。在JavaScript中,可以使用閉包來實現備忘錄模式。 備忘錄模式通常用於處理用戶界面的狀態。當用戶與應用程式交互時,應用程式會根據用戶的輸入更改其狀態。 ...
  • 在基於vue-next-admin 的 Vue3+TypeScript 前端項目中,可以整合自己的 .NET 後端,前端操作一些功能的時候,為了使用方便全局掛載的對象介面,以便能夠快速處理一些特殊的操作,如消息提示、輔助函數、正則測試等等。本篇隨筆介紹在Vue3+TypeScript 前端項目中全局... ...
  • 眾所周知,網頁的暗黑模式可以減少屏幕反射和藍光輻射,減少眼睛的疲勞感,特別是在夜間使用時更為明顯。其實暗黑模式也給霓虹燈效應(Neon Effect)提供了發揮的環境。 霓虹燈效應是一種視覺效果,其特點是在深色背景上使用鮮艷的顏色來產生強烈的視覺衝擊。這種效應通常用於設計海報、廣告、標誌和網頁等。霓 ...
  • 領域驅動設計(Domain Driven Design,簡稱:DDD)設計思想和方法論早在2005年時候就被提出來,但是一直沒有被重視和推薦使用,直到2015年之後微服務流行之後,再次被人重視和推薦使用。 下麵我來介紹一下DDD設計思想和方法論,同時結合我們在實際項目中應用總結和思考。 目錄 1、為 ...
  • 一、案例背景 電腦包含記憶體(RAM),CPU 等硬體設備,根據如圖所示的“產品等級結構-產品族示意圖”,使用抽象工廠模式實現電腦設備創建過程並繪製類圖 二、實現步驟 根據題意,使用抽象工廠模式並畫出類圖,類圖中應包含一個抽象工廠類 AbstractFactory,PcFactory 和 MacF ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...