JMH 性能测试

57 阅读1分钟
package com.hzmc.epc.plugin;


import com.hzmc.common.epc.model.AuditEventBO;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import static com.hzmc.epc.plugin.count.CustomElementAdapter.FUNC_MAP;

@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Thread)
@Warmup(iterations = 30, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 50, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(1)
@Threads(2)
public class BenchmarkTest {

    static Set<String> keys;
    static List<String> list = new java.util.ArrayList<>();

    static {
        keys = FUNC_MAP.keySet();
        list.add("o_req_len");
        list.add("o_resp_len");
    }


    @Benchmark
    public void apply() {
        AuditEventBO auditEventBO = new AuditEventBO();
        FUNC_MAP.get("e_time").apply(auditEventBO);
    }


    @Benchmark
    public void apply2() {
        AuditEventBO auditEventBO = new AuditEventBO();
        FUNC_MAP.get("o_req_len").apply(auditEventBO);
        FUNC_MAP.get("o_resp_len").apply(auditEventBO);
    }

    @Benchmark
    public void apply2List() {
        AuditEventBO auditEventBO = new AuditEventBO();

        for (String key : list) {
            FUNC_MAP.get(key).apply(auditEventBO);
        }

    }

    @Benchmark
    public void applyAllOnlyGet() {
        AuditEventBO auditEventBO = new AuditEventBO();
        for (String key : keys) {

        }
    }

    @Benchmark
    public void applyAll() {
        AuditEventBO auditEventBO = new AuditEventBO();
        for (String key : keys) {
            FUNC_MAP.get(key).apply(auditEventBO);
        }
    }

    @Benchmark
    public void get() {
        AuditEventBO auditEventBO = new AuditEventBO();
        auditEventBO.getETime();
    }

    @Benchmark
    public void getAll() {
        AuditEventBO auditEventBO = new AuditEventBO();
        auditEventBO.getEId();
        auditEventBO.getETime();
        auditEventBO.getECategory();
        auditEventBO.getEType();
        auditEventBO.getECapDevType();
        auditEventBO.getECapDevId();
        auditEventBO.getECapDevIp();
        auditEventBO.getETerminalId();
        auditEventBO.getECapDevName();
        auditEventBO.getSOsUser();
        auditEventBO.getSDbUser();
        auditEventBO.getSPerCert();
        auditEventBO.getSDevCert();
        auditEventBO.getSDevIp();
        auditEventBO.getSDevPort();
        auditEventBO.getSDevMac();
        auditEventBO.getSDevName();
        auditEventBO.getSAppPath();
        auditEventBO.getSAppName();
        auditEventBO.getSAppHash();
        auditEventBO.getSAppSign();
        auditEventBO.getSTDevIp();
        auditEventBO.getSTDevPort();
        auditEventBO.getSTDevMac();
        auditEventBO.getSTAccount();
        auditEventBO.getSTAppName();
        auditEventBO.getSSecurityUser();
        auditEventBO.getSDevIpGeo();
        auditEventBO.getCTime();
        auditEventBO.getCTimeMico();
        auditEventBO.getCSession();
        auditEventBO.getBActionCategory();
        auditEventBO.getBAction();
        auditEventBO.getOId();
        auditEventBO.getOName();
        auditEventBO.getOType();
        auditEventBO.getOSvrIp();
        auditEventBO.getOSvrPort();
        auditEventBO.getOObjType();
        auditEventBO.getOObject();
        auditEventBO.getOSchema();
        auditEventBO.getOStatement();
        auditEventBO.getOStandard();
        auditEventBO.getOVariable();
        auditEventBO.getOFilePath();
        auditEventBO.getRMatchedId();
        auditEventBO.getRMatchedName();
        auditEventBO.getRResponse();
        auditEventBO.getRRiskName();
        auditEventBO.getRRiskType();
        auditEventBO.getRRisk();
        auditEventBO.getRRiskAll();
        auditEventBO.getRAudit();
        auditEventBO.getFAffected();
        auditEventBO.getFRunningTime();
        auditEventBO.getFErr();
        auditEventBO.getReviewStatus();
        auditEventBO.getReviewRemark();
        auditEventBO.getRaw();
        auditEventBO.getFErrDescription();
        auditEventBO.getRRiskDescription();
        auditEventBO.getFromStandard();
        auditEventBO.getDimensionKey();
        auditEventBO.getStreamTimeInterval();
        auditEventBO.getOStandardId();
        auditEventBO.getToolSql();
        auditEventBO.getIsBlackList();
        auditEventBO.getSIdentityName();
        auditEventBO.getSIdentityGroupName();
        auditEventBO.getSSqlTruncate();
        auditEventBO.getSSqlSize();
        auditEventBO.getTenantId();
        auditEventBO.getORespMsg();
        auditEventBO.getOReqLen();
        auditEventBO.getORespLen();
        auditEventBO.getSMsgList();
        auditEventBO.getOReqHeader();
        auditEventBO.getORespHeader();
        auditEventBO.getOReqBody();
        auditEventBO.getOProtocol();
        auditEventBO.getOAppDomain();
        auditEventBO.getOAppMac();
        auditEventBO.getOReqContentType();
        auditEventBO.getORespContentType();
        auditEventBO.getServiceUnitId();
        auditEventBO.getBusinessTypeId();
        auditEventBO.getOUserAgent();
        auditEventBO.getOCookie();
        auditEventBO.getOReferrer();
        auditEventBO.getReqDataTag();
        auditEventBO.getRespDataTag();
        auditEventBO.getDataTagLevel();
        auditEventBO.getGeoLocation();
        auditEventBO.getRequestInfo();
        auditEventBO.getAttackPhase();
        auditEventBO.getOUid();
        auditEventBO.getOServiceName();
        auditEventBO.getOInstanceName();
        auditEventBO.getTargetAppKey();
        auditEventBO.getTargetAppName();
    }


    @Benchmark
    public void get2() {
        AuditEventBO auditEventBO = new AuditEventBO();
        auditEventBO.getOReqLen();
        auditEventBO.getORespLen();
    }


    public static void main(String[] args) throws Exception {
        Options opts = new OptionsBuilder()
                .include(BenchmarkTest.class.getSimpleName())
                .resultFormat(ResultFormatType.JSON)
                .build();
        new Runner(opts).run();
    }
}

Benchmark                       Mode  Cnt      Score      Error   Units
BenchmarkTest.apply            thrpt   50  30306.494 ± 1347.150  ops/ms
BenchmarkTest.apply2           thrpt   50  30277.233 ± 1537.006  ops/ms
BenchmarkTest.apply2List       thrpt   50  29796.231 ±  856.000  ops/ms
BenchmarkTest.applyAll         thrpt   50    802.073 ±   11.162  ops/ms
BenchmarkTest.applyAllOnlyGet  thrpt   50   6999.791 ±   46.101  ops/ms
BenchmarkTest.get              thrpt   50  31166.424 ±  576.618  ops/ms
BenchmarkTest.get2             thrpt   50  30720.373 ±  654.457  ops/ms
BenchmarkTest.getAll           thrpt   50  29893.775 ±  539.495  ops/ms