如何检测StopWatch番石榴的执行时间?

时间:2019-01-29 15:15:00

标签: java guava

我最近一直在使用番石榴,面对这样一个问题,我想衡量put(str)方法的总执行时间,该方法将字符串放入map中。我尝试使用StopWatch来执行此操作,并计算该方法执行的平均时间,但此刻我一直在不断返回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);
    }

1 个答案:

答案 0 :(得分:3)

通过强制转换为double来解决:

@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
}