Java 方法在netbeans探查器中取0ms
我希望在netbeans中分析两种方法 这是密码Java 方法在netbeans探查器中取0ms,java,netbeans,profiling,Java,Netbeans,Profiling,我希望在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)&g
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探查器,快照显示这些方法的自我时间都是0毫秒
我使用循环从main调用这两个方法1000次。如果执行时间明显减少,无法用毫秒表示,有没有办法用纳秒表示?我会在每帧图像上运行这些方法一百万次,也就是每秒3000万次。我需要配置文件并选择最好的方法
我需要配置文件并选择最好的方法
构建一个微基准:(比看起来要难)。我主要在示例代码中看到快速位操作,因此0毫秒并不令人惊讶。您可以尝试
System.nanoTime()
来测量相当长的循环周期的相对持续时间
但是:为什么您关心这种快速代码的优化/性能呢?为了您的方便:
@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)。小于一毫秒的差异真的重要吗?(回答:否)(旁注:您的第一个方法可以写在一行
return(a-b)中>10
,如果第二个方法中的,您可以用返回a==b
替换。您有秒针时钟吗?不要运行10^3次。运行10^9次,看看它们需要多少秒。这告诉您一次呼叫需要多少纳秒。(1毫秒=10^6纳秒,这可能就是您看到0毫秒的原因。)顺便说一句,这两个函数做的事情看起来不一样。这只是方法的一部分,其中还有一些其他的东西,会给ms带来执行时间。但是当我看到0ms时,我很恐慌,我认为我做得不好,所以发了这篇文章。