我想在netbeans中分析两种方法
这里有代码
public static boolean compare1(int a,int b){
if((a-b)>10)
return true;
else
return false;
}
public static boolean compare2(int a,int b){
a = ((a&0xf00000)>>12)+((a&0xf000)>>8)+((a&0xf0)>>4);
b = ((b&0xf00000)>>12)+((b&0xf000)>>8)+((b&0xf0)>>4);
if(a==b)
return true;
else
return false;
}
netbeans如何为这两种方法返回0ms !!我为整个项目运行了netbeans探测器,快照表示每种方法的自我时间都是0ms。
我使用循环1000次从main调用这两个方法。如果执行时间显着减少,以至于无法在MS中表达它是否有办法在纳秒内表达它?我会在每个图像帧上运行这些方法一百万次,每秒3000万次。我需要剖析并选择最好的方法。
答案 0 :(得分:2)
我需要剖析并选择最好的方法。
构建微观基准:How do I write a correct micro-benchmark in Java?(它看起来比它看起来更难)。
答案 1 :(得分:1)
在这里,为方便起见:
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@BenchmarkMode(Mode.Throughput)
@Warmup(iterations = 3, time = 1)
@Measurement(iterations = 3, time = 1)
@State(Scope.Thread)
@Fork(3)
public class Comparison
{
int a, b;
final Random rnd = new Random();
@Setup(Level.Iteration)
public void setup() { a = rnd.nextInt(); b = rnd.nextInt(); }
@GenerateMicroBenchmark
public boolean testCompare1() { return compare1(a, b); }
@GenerateMicroBenchmark
public boolean testCompare2() { return compare2(a, b); }
static boolean compare1(int a, int b) { return a - b > 10; }
static boolean compare2(int a, int b){
return ((a&0xf00000)>>12)+((a&0xf000)>>8)+((a&0xf0)>>4) ==
((b&0xf00000)>>12)+((b&0xf000)>>8)+((b&0xf0)>>4);
}
}
结果:
Benchmark Mode Thr Cnt Sec Mean Mean error Units
testCompare1 thrpt 1 9 1 529.178 5.925 ops/usec
testCompare2 thrpt 1 9 1 288.288 4.058 ops/usec
这意味着,至少在我的计算机上,对于较慢的方法,你可以达到每秒2.88亿次调用(compare2)。
答案 2 :(得分:0)
我主要在你的示例代码中看到快速位操作,因此0 ms并不令人惊讶。您可以尝试System.nanoTime()
来衡量相当长的循环周期的相对持续时间。
但是:你为什么关心这种快速代码的优化/性能?