자바 Benchmark 기준 테스트 의 인 스 턴 스 상세 설명

7779 단어
자바 Benchmark 기준 테스트 의 인 스 턴 스 상세 설명

import java.util.Arrays; 
import java.util.concurrent.TimeUnit; 
 
import org.openjdk.jmh.annotations.Benchmark; 
import org.openjdk.jmh.annotations.BenchmarkMode; 
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; 
 
@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) 
public class InstructionsBenchmark{ 
  static int staticPos = 0; 
  //String src = "SELECT a FROM ab       , ee.ff AS f,(SELECT a FROM `schema_bb`.`tbl_bb`,(SELECT a FROM ccc AS c, `dddd`));"; 
  final byte[] 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}; 
  int len = srcBytes.length; 
  byte[] array = new byte[8192]; 
  int memberVariable = 0; 
 
  //run 
  public static void main(String[] args) throws RunnerException { 
    Options opt = new OptionsBuilder() 
        .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)  // report JIT compiler profiling via standard MBeans 
        // .addProfiler(GCProfiler.class)  // report GC time 
        // .addProfiler(StackProfiler.class) // report method stack execution profile 
        // .addProfiler(PausesProfiler.class) 
        /* 
        WinPerfAsmProfiler 
        You must install Windows Performance Toolkit. Once installed, locate directory with xperf.exe file 
        and either add it to PATH environment variable, or set it to jmh.perfasm.xperf.dir system property. 
         */ 
        //.addProfiler(WinPerfAsmProfiler.class) 
        //  Profiler,  JMH   
        //.output("InstructionsBenchmark.log")//        
        .build(); 
    new Runner(opt).run(); 
  } 
 
 
  //        
  @Benchmark 
  public int emptyLoop() { 
    int pos = 0; 
    while (pos < len) { 
      ++pos; 
    } 
    return pos; 
  } 
 
  @Benchmark 
  public int increment() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      ++result; 
      ++pos; 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int decrement() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      --result; 
      ++pos; 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int ifElse() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      if (pos == 10) { 
        ++result; 
        ++pos; 
      } else { 
        ++pos; 
      } 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int ifElse2() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      if (pos == 10) { 
        ++result; 
        ++pos; 
      } else if (pos == 20) { 
        ++result; 
        ++pos; 
      } else { 
        ++pos; 
      } 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int ifnotElse() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      if (pos != 10) { 
        ++pos; 
      } else { 
        ++result; 
        ++pos; 
      } 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int ifLessthanElse() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      if (pos < 10) { 
        ++pos; 
      } else { 
        ++result; 
        ++pos; 
      } 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int ifGreaterthanElse() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      if (pos > 10) { 
        ++pos; 
      } else { 
        ++result; 
        ++pos; 
      } 
    } 
    return result; 
  } 
 
  @Benchmark 
  public int readMemberVariable_a_byteArray() { 
    int pos = 0; 
    int result = 0; 
    while (pos < len) { 
      result = srcBytes[pos]; 
      pos++; 
    } 
    return result; 
  } 
 
} 

 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 
                .* 
               
             
           
         
       
     
   

이상 은 자바 Benchmark 기준 테스트 입 니 다. 궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 하 십시오. 읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다. 본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기