BYTECODES

Java性能优化

有三种性能测试: microbenchmarks, macrobenchmarks, 以及 mesobenchmarks

microbenchmarks性能测试:

  • 好的microbenchmarks很难写,需要注意很多事项

  • 针对多个输入进行测试,避免代码被编译器优化

  • 被测试的函数运行的结果需要有地方使用,避免被优化,比如下面的l就没有使用

public void doTest() { // Main Loop
        double l; for(inti=0;i<nWarmups;i++){
            l = fibImpl1(50);
        }
        long then = System.currentTimeMillis(); 
        for(inti=0;i<nLoops;i++){
            l = fibImpl1(50);
        }
        long now = System.currentTimeMillis();
        System.out.println("Elapsed time: " + (now - then));
}
  • 在生产环节中,microbenchmarks可能完全不一样,因为编译器会根据函数调用情况进行优化

Macrobenchmarks

测试一个应用的整体性能

Mesobenchmarks

居于microbenchmarks和Macrobenchmarks中间,比如只测试一个REST接口