Java 如何检测秒表番石榴的执行时间?

Java 如何检测秒表番石榴的执行时间?,java,guava,Java,Guava,我最近一直在使用guava,面对这样一个问题,我想测量put(str)方法的总执行时间,该方法将字符串放入映射中。我尝试用秒表来计算方法执行的平均时间,但目前我不断返回0 private int putCounter = 0; private Stopwatch stopWatch = new Stopwatch(); private CustomCache mapBasedCache = new MapBasedCache(); @Override publi

我最近一直在使用guava,面对这样一个问题,我想测量put(str)方法的总执行时间,该方法将字符串放入映射中。我尝试用秒表来计算方法执行的平均时间,但目前我不断返回0

private int putCounter = 0;
    private Stopwatch stopWatch = new Stopwatch();
    private CustomCache mapBasedCache = new MapBasedCache();

    @Override
    public void getEvictions(String str) {
        stopWatch.start();
        mapBasedCache.put(str);
        putCounter++;
        stopWatch.stop();
    }

    @Override
    public long getAveragePutTime() {
        return stopWatch.elapsedTime(TimeUnit.SECONDS) / putCounter;
    }
我的测试方法:

public void getAveragePutTime() {
        for (int i = 0; i < 10_000_000; i++){
            gg.getEvictions("ab" + i);
        }


        long time = gg.getAveragePutTime();
        System.out.println(time);
    }
public void getAveragePutTime(){
对于(int i=0;i<10_000;i++){
gg.被驱逐(“ab”+i);
}
long time=gg.getAveragePutTime();
系统输出打印LN(时间);
}

通过将其转换为
双精度来修复它:

@Override
public double getAveragePutTime() {
    return (double)(stopWatch.elapsedTime(TimeUnit.SECONDS)) / putCounter;
}
为什么?

因为在最坏的情况下,你把10秒除以1000万。使用长整数

在java中,
(long)10/(int)10_000_000
只提供
0
。所以就在某个地方投一个替身吧

或者更好地使用更精确的时间单位:

@Override
public double getAveragePutTime() {
    return (double)(stopWatch.elapsedTime(TimeUnit.NANOSECONDS)) / putCounter
}

也许真的是0秒。您可以尝试验证秒表是否正常工作的一件事是添加一个
sleep
,看看您是否得到了0以外的值。但是如果我这样做的话。我有7秒的秒表;对于(inti=0;i<10_000_000;i++){gg.getexecutions(“ab”+i)}stopwatch.stop();