Как определить время выполнения StopWatch гуавы? - PullRequest
0 голосов
/ 29 января 2019

Я недавно работал с гуавой, столкнулся с таким вопросом, я хочу измерить общее время выполнения метода put (str), который помещает строку в карту.Я пытаюсь сделать это с помощью 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 голосов
/ 30 января 2019

Исправлено, приведение к double:

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

Почему?

Поскольку вы делите что-то вроде 10 секунд в худшем случае на 10 миллионов.С длинными и целыми числами !!

В Java (long)10 / (int)10_000_000 не даст ничего, кроме 0.Так что просто бросьте где-нибудь двойное.

Или еще лучше, используйте более точную единицу времени:

@Override
public double getAveragePutTime() {
    return (double)(stopWatch.elapsedTime(TimeUnit.NANOSECONDS)) / putCounter
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...