如何检测 StopWatch guava 的执行时间?
How to detect the execution time of StopWatch guava?
最近在用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);
}
通过转换为 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
}
最近在用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);
}
通过转换为 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
}