国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JMH - Java代碼基準(zhǔn)測(cè)試工具,代碼性能問(wèn)題驗(yàn)證測(cè)試

這篇具有很好參考價(jià)值的文章主要介紹了JMH - Java代碼基準(zhǔn)測(cè)試工具,代碼性能問(wèn)題驗(yàn)證測(cè)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、前言

在日常開(kāi)發(fā)工作當(dāng)中,開(kāi)發(fā)人員可能有這些困惑:自己寫(xiě)的這個(gè)方法性能到底怎么樣?在原接口實(shí)現(xiàn)方法中添加了新的業(yè)務(wù)邏輯,對(duì)整個(gè)接口的性能影響有多少?有多種實(shí)現(xiàn)方式(或開(kāi)源類(lèi)庫(kù)),到底哪一種性能更好?
當(dāng)遇到類(lèi)似困惑或者說(shuō)問(wèn)題的時(shí)候,怎么辦呢?當(dāng)然是測(cè)試驗(yàn)證,實(shí)踐出真知!本文講述的就是一個(gè)方法級(jí)別的性能測(cè)試工具—— JMH。

二、JMH概述

1、什么是JMH

JMH,即 Java Microbenchmark Harness,是專(zhuān)門(mén)用于代碼微基準(zhǔn)測(cè)試的工具套件。何謂Micro Benchmark呢?簡(jiǎn)單的來(lái)說(shuō)就是基于方法層面的基準(zhǔn)測(cè)試,精度可以達(dá)到微秒級(jí)。其由 Oracle/openjdk 內(nèi)部開(kāi)發(fā)JIT編譯器的大佬們所開(kāi)發(fā),作為java的方法級(jí)性能測(cè)試工具可以說(shuō)是根正苗紅了。(官方地址:http://hg.openjdk.java.net/code-tools/jmh/ )

2、JMH適用的典型場(chǎng)景

  • a、優(yōu)化熱點(diǎn)方法,準(zhǔn)確的知道某個(gè)方法的執(zhí)行耗時(shí),以及不同入?yún)⑴c最終實(shí)際耗時(shí)的關(guān)系,從而針對(duì)性的進(jìn)行優(yōu)化;
  • b、尋找最佳方案,驗(yàn)證接口方法不同實(shí)現(xiàn)方式的實(shí)際吞吐量,從而確定最佳實(shí)現(xiàn)方式 。如:選擇json轉(zhuǎn)換工具時(shí)選fastjson還是gson、字符串連接使用StringBuilder方式還是直接相加;
  • c、分析性能損耗,在原接口方法業(yè)務(wù)邏輯中添加新的業(yè)務(wù)代碼時(shí),對(duì)整個(gè)業(yè)務(wù)方法的性能影響。如:在原業(yè)務(wù)邏輯中,添加一個(gè)插入操作日志的操作,可以分析新加操作對(duì)整個(gè)業(yè)務(wù)方法的性能影響。
  • d、分析百分比內(nèi)的耗時(shí),即測(cè)試方法多次調(diào)用時(shí)百分比區(qū)間內(nèi)的耗時(shí),如:測(cè)試調(diào)用某個(gè)方法,50%以?xún)?nèi)的調(diào)用耗時(shí)是8.2ms/op,90%以?xún)?nèi)是9.3ms/op,99.99%以?xún)?nèi)是10.2ms/op,等等。(模式為Mode.SampleTime)

3、JMH基本概念

  • a、Mode :表示JMH測(cè)試中的模式,默認(rèn)有5種,分別是Throughput(吞吐量)、AverageTime(平均耗時(shí))、SampleTime(隨機(jī)采樣)、SingleShotTime(單次執(zhí)行)、All(以上4種都來(lái)一次);
  • b、Fork:表示JMH將用來(lái)測(cè)試的進(jìn)程數(shù);
  • c、Warmup : 表示預(yù)熱,在HotSpot中,JVM的JIT編譯器會(huì)對(duì)熱點(diǎn)代碼進(jìn)行編譯優(yōu)化, 因此為了最接近真實(shí)的情況,需要先預(yù)熱測(cè)試代碼,使JIT編譯器完成可能需要的優(yōu)化,從而令JMH最終測(cè)試結(jié)果更加準(zhǔn)確;
  • d、Iteration :表示JMH中的最小測(cè)試迭代單位,即測(cè)試次數(shù),一般默認(rèn)值是每次1s;
  • e、Benchmark:用于標(biāo)注JMH將進(jìn)行測(cè)試的方法。(類(lèi)似Junit中的@Test注解)

三、示例

1、添加依賴(lài)

    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>1.36</version>
    </dependency>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>1.36</version>
        <scope>provided</scope>
    </dependency>

2、示例代碼

package com.example.springbootdemo1;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Threads;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

import java.util.concurrent.TimeUnit;

/**
 * try - catch 性能測(cè)試
 */
@BenchmarkMode(Mode.AverageTime) // 測(cè)試完成時(shí)間
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS) // 預(yù)熱 1 輪,每次 1s
@Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS) // 測(cè)試 5 輪,每次 3s
@Fork(1) // fork 1 個(gè)線(xiàn)程
@State(Scope.Benchmark)
@Threads(100)
public class TryCatchPerformanceTest {
    private static final int forSize = 1000; // 循環(huán)次數(shù)

    public static void main(String[] args) throws RunnerException {
        // 啟動(dòng)基準(zhǔn)測(cè)試
        Options opt = new OptionsBuilder().include(TryCatchPerformanceTest.class.getSimpleName()) // 要導(dǎo)入的測(cè)試類(lèi)
                .build();
        new Runner(opt).run(); // 執(zhí)行測(cè)試
    }

    @Benchmark
    public int innerForeach() {
        int count = 0;
        for (int i = 0; i < forSize; i++) {
            try {
                if (i == forSize) {
                    throw new Exception("new Exception");
                }
                count++;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return count;
    }

    @Benchmark
    public int outerForeach() {
        int count = 0;
        try {
            for (int i = 0; i < forSize; i++) {
                if (i == forSize) {
                    throw new Exception("new Exception");
                }
                count++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return count;
    }
}

代碼拷貝就可以直接運(yùn)行,其他更多測(cè)試請(qǐng)自行修改試驗(yàn)。

參考:https://www.uoften.com/article/215076.html


(END)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-722900.html

到了這里,關(guān)于JMH - Java代碼基準(zhǔn)測(cè)試工具,代碼性能問(wèn)題驗(yàn)證測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 測(cè)試工具之JMH詳解

    測(cè)試工具之JMH詳解

    在日常開(kāi)發(fā)中,我們對(duì)一些代碼的調(diào)用或者工具的使用會(huì)存在多種選擇方式,在不確定他們性能的時(shí)候,我們首先想要做的就是去測(cè)量它。大多數(shù)時(shí)候,我們會(huì)簡(jiǎn)單的采用多次計(jì)數(shù)的方式來(lái)測(cè)量,來(lái)看這個(gè)方法的總耗時(shí)。 但是,如果熟悉 JVM 類(lèi)加載機(jī)制的話(huà),應(yīng)該知道 JVM 默

    2024年02月08日
    瀏覽(24)
  • 【性能測(cè)試】性能測(cè)試工具LoadRunner,參數(shù)化關(guān)聯(lián)。全md文檔筆記(已分享文檔代碼)

    【性能測(cè)試】性能測(cè)試工具LoadRunner,參數(shù)化關(guān)聯(lián)。全md文檔筆記(已分享文檔代碼)

    本系列文章md筆記(已分享)主要討論性能測(cè)試相關(guān)知識(shí)。入門(mén)階段:認(rèn)識(shí)性能測(cè)試分類(lèi)-(負(fù)載測(cè)試、壓力測(cè)試、并發(fā)測(cè)試、穩(wěn)定性測(cè)試),常用性能測(cè)試指標(biāo)-(吞吐量、并發(fā)數(shù)、響應(yīng)時(shí)間、點(diǎn)擊數(shù)...),性能測(cè)試工具選擇。性能腳本:1. LoadRunner介紹,2. 腳本錄制、運(yùn)行、參數(shù)化

    2024年02月21日
    瀏覽(36)
  • 性能測(cè)試工具LR常見(jiàn)問(wèn)題匯總

    本文是收集整理LR常見(jiàn)的問(wèn)題,如果你有收集整理常見(jiàn)的問(wèn)題 本文意義:讓所有使用LR的同學(xué),在此處能找到LR日常碰到問(wèn)題的解決方案。 1 )如果安裝 了IE以外的瀏覽器,并且IE不是默認(rèn)瀏覽器,則無(wú)法生成錄制腳本 2 )如果錄制腳本時(shí)IE 不能打開(kāi),則需要將瀏覽器的IE工具

    2024年02月10日
    瀏覽(24)
  • 性能測(cè)試工具 Jmeter 測(cè)試 JMS (Java Message Service)/ActiveMQ 性能

    目錄 前言 ActiveMQ 介紹 準(zhǔn)備工作 編寫(xiě)jndi.properties添加到ApacheJMeter.jar?中 下載 ActiveMQ 配置 Jmeter 進(jìn)行測(cè)試 點(diǎn)對(duì)點(diǎn) (Queues 隊(duì)列)

    2024年02月15日
    瀏覽(95)
  • Java--JMH--性能測(cè)試--測(cè)試軟件運(yùn)行效率/時(shí)間--StopWatch

    Java--JMH--性能測(cè)試--測(cè)試軟件運(yùn)行效率/時(shí)間--StopWatch

    寫(xiě)在前面: 很多時(shí)候想要測(cè)試代碼運(yùn)行時(shí)間,或者比較2個(gè)運(yùn)行的效率。 最簡(jiǎn)單的方法就是Sytem.currentTimeMillis記錄2開(kāi)始和結(jié)束時(shí)間來(lái)算 但是Java 代碼越執(zhí)行越快,放在后面的方法會(huì)有優(yōu)勢(shì),這個(gè)原因受留個(gè)眼,以后研究。大概有受類(lèi)加載,緩存預(yù)熱, jit 編譯優(yōu)化等原因。 需要

    2024年01月21日
    瀏覽(39)
  • 【工具/性能】開(kāi)源的性能測(cè)試工具sysbench

    sysbensh是一個(gè)非常通用的benchmark工具,其提供多種方面的測(cè)試: cpu :提供一個(gè)簡(jiǎn)單的cpu benchmark測(cè)試 fileio:文件磁盤(pán)io的benchmark測(cè)試 memory:內(nèi)存訪(fǎng)問(wèn) benchmark測(cè)試 thread:線(xiàn)程調(diào)度 benchmark測(cè)試 mutex:POSIX的鎖 benchmark測(cè)試 OLTP:數(shù)據(jù)庫(kù) benchmark測(cè)試,支持MySQL,Pgsql 默認(rèn)支持MySQL,如

    2024年02月12日
    瀏覽(23)
  • H5性能測(cè)試以及H5性能測(cè)試工具

    H5性能測(cè)試以及H5性能測(cè)試工具

    背景由于公司最近項(xiàng)目有一個(gè)H5測(cè)試項(xiàng)目,功能測(cè)試不用多說(shuō),但是H5性能測(cè)試是一個(gè)大難題,于是研究下H5性能測(cè)試,下面總結(jié)下,希望能幫助自己回顧項(xiàng)目也希望能幫到測(cè)友。 H5性能測(cè)試的常用指標(biāo): 白屏?xí)r間:用戶(hù)首次看到網(wǎng)頁(yè)內(nèi)容的時(shí)間,即第一次渲染流程完成的時(shí)間

    2024年02月14日
    瀏覽(21)
  • 前端性能測(cè)試必備測(cè)試工具

    前端性能測(cè)試必備測(cè)試工具

    我們?cè)谑褂镁W(wǎng)站過(guò)程中,經(jīng)常會(huì)遇到慢的問(wèn)題,為了找到原因,一般需要借助工具進(jìn)行檢測(cè),通過(guò)工具,可以檢測(cè)出前端站點(diǎn)加載資源的相關(guān)詳細(xì)情況。 今天,就給大家介紹幾款前端性能測(cè)試分析工具,結(jié)合性能測(cè)試工具,實(shí)現(xiàn)通過(guò)量化的方式測(cè)試網(wǎng)站中諸如首字節(jié)加載時(shí)間

    2024年02月05日
    瀏覽(24)
  • 功能測(cè)試(八)—— APP之專(zhuān)項(xiàng)測(cè)試、性能測(cè)試、性能測(cè)試工具SoloPi

    功能測(cè)試(八)—— APP之專(zhuān)項(xiàng)測(cè)試、性能測(cè)試、性能測(cè)試工具SoloPi

    目錄 APP測(cè)試要點(diǎn) 目標(biāo) 一、APP專(zhuān)項(xiàng)測(cè)試 1.1?兼容性 1.2?安裝 1.3?卸載 1.4?升級(jí) 1.5?干擾測(cè)試(交叉事件測(cè)試) 1.6?Push推送 1.7?用戶(hù)體驗(yàn) 二、 性能測(cè)試工具 2.1?APP性能測(cè)試工具介紹 —— SoloPi簡(jiǎn)介 2.2?APP性能測(cè)試工具 —— SoloPi使用 三、APP性能測(cè)試 3.1?CPU 3.2?內(nèi)存 3.3?流量 3.4?電

    2024年02月03日
    瀏覽(31)
  • jmeter 性能測(cè)試工具的使用(Web性能測(cè)試)

    jmeter 性能測(cè)試工具的使用(Web性能測(cè)試)

    1、下載 該軟件不用安裝,直接解壓打開(kāi)即可使用。 2、使用 這里就在win下進(jìn)行,圖形界面較為方便 在目錄apache-jmeter-2.13bin 下可以見(jiàn)到一個(gè)jmeter.bat文件,雙擊此文件,即看到JMeter控制面板。主界面如下: 3、創(chuàng)建線(xiàn)程組 測(cè)試計(jì)劃--右鍵——》添加——》hreads——》線(xiàn)程組 設(shè)

    2024年02月10日
    瀏覽(99)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包