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(pos10){
++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基准测试,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!