Java Benchmark 基准测试的实例详解
JavaBenchmark基准测试的实例详解
importjava.util.Arrays; importjava.util.concurrent.TimeUnit; importorg.openjdk.jmh.annotations.Benchmark; importorg.openjdk.jmh.annotations.BenchmarkMode; importorg.openjdk.jmh.annotations.Measurement; importorg.openjdk.jmh.annotations.Mode; importorg.openjdk.jmh.annotations.OutputTimeUnit; importorg.openjdk.jmh.annotations.Scope; importorg.openjdk.jmh.annotations.State; importorg.openjdk.jmh.annotations.Threads; importorg.openjdk.jmh.annotations.Warmup; importorg.openjdk.jmh.runner.Runner; importorg.openjdk.jmh.runner.RunnerException; importorg.openjdk.jmh.runner.options.Options; importorg.openjdk.jmh.runner.options.OptionsBuilder; @BenchmarkMode(Mode.Throughput)//基准测试类型 @OutputTimeUnit(TimeUnit.SECONDS)//基准测试结果的时间类型 @Warmup(iterations=3)//预热的迭代次数 @Threads(2)//测试线程数量 @State(Scope.Thread)//该状态为每个线程独享 //度量:iterations进行测试的轮次,time每轮进行的时长,timeUnit时长单位,batchSize批次数量 @Measurement(iterations=2,time=-1,timeUnit=TimeUnit.SECONDS,batchSize=-1) publicclassInstructionsBenchmark{ staticintstaticPos=0; //Stringsrc="SELECTaFROMab,ee.ffASf,(SELECTaFROM`schema_bb`.`tbl_bb`,(SELECTaFROMcccASc,`dddd`));"; finalbyte[]srcBytes={83,69,76,69,67,84,32,97,32,70,82,79,77,32,97,98,32,32,32,32,32,32,32,32,32,32,32,32,32,44,32,101,101,46,102,102,32,65,83,32,102,44,40,83,69,76,69,67,84,32,97,32,70,82,79,77,32,96,115,99,104,101,109,97,95,98,98,96,46,96,116,98,108,95,98,98,96,44,40,83,69,76,69,67,84,32,97,32,70,82,79,77,32,99,99,99,32,65,83,32,99,44,32,96,100,100,100,100,96,41,41,59}; intlen=srcBytes.length; byte[]array=newbyte[8192]; intmemberVariable=0; //run publicstaticvoidmain(String[]args)throwsRunnerException{ Optionsopt=newOptionsBuilder() .include(InstructionsBenchmark.class.getSimpleName()) .forks(1) //使用之前要安装hsdis //-XX:-TieredCompilation关闭分层优化-server //-XX:+LogCompilation运行之后项目路径会出现按照测试顺序输出hotspot_pid.log文件,可以使用JITWatch进行分析,可以根据最后运行的结果的顺序按文件时间找到对应的hotspot_pid .log文件 .jvmArgs("-XX:+UnlockDiagnosticVMOptions","-XX:+LogCompilation","-XX:+TraceClassLoading","-XX:+PrintAssembly") //.addProfiler(CompilerProfiler.class)//reportJITcompilerprofilingviastandardMBeans //.addProfiler(GCProfiler.class)//reportGCtime //.addProfiler(StackProfiler.class)//reportmethodstackexecutionprofile //.addProfiler(PausesProfiler.class) /* WinPerfAsmProfiler YoumustinstallWindowsPerformanceToolkit.Onceinstalled,locatedirectorywithxperf.exefile andeitheraddittoPATHenvironmentvariable,orsetittojmh.perfasm.xperf.dirsystemproperty. */ //.addProfiler(WinPerfAsmProfiler.class) //更多Profiler,请看JMH介绍 //.output("InstructionsBenchmark.log")//输出信息到文件 .build(); newRunner(opt).run(); } //空循环对照项 @Benchmark publicintemptyLoop(){ intpos=0; while(pos 10){ ++pos; }else{ ++result; ++pos; } } returnresult; } @Benchmark publicintreadMemberVariable_a_byteArray(){ intpos=0; intresult=0; while(pos ops/time:标识每秒钟执行的次数
依赖jar包:
org.openjdk.jmh jmh-core ${jmh.version} org.openjdk.jmh jmh-generator-annprocess ${jmh.version} provided org.codehaus.mojo exec-maven-plugin run-benchmarks integration-test exec test java -classpath org.openjdk.jmh.Main .* 以上就是JavaBenchmark基准测试,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!