Java 方法在netbeans探查器中取0ms

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

我希望在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探查器,快照显示这些方法的自我时间都是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时,我很恐慌,我认为我做得不好,所以发了这篇文章。