В Java я хотим измерять время дляОсновные (арифметические) операции и их зависимость от виртуальной машины Java и CPU
- 1000 целочисленных сравнений ("<" оператор),
- 1000 целочисленных дополнений (а + б каждый случай для разных a и b),
- другие простые операции.
Я знаю, что могу это сделать следующим образом:
Random rand = new Random();
long elapsedTime = 0;
for (int i = 0; i < 1000; i++) {
int a = Integer.MIN_VALUE + rand.nextInt(Integer.MAX_VALUE);
int b = Integer.MIN_VALUE + rand.nextInt(Integer.MAX_VALUE);
long start = System.currentTimeMillis();
if (a < b) {}
long stop = System.currentTimeMillis();
elapsedTime += (start - stop);
}
System.out.println(elapsedTime);
Я знаю, что этот вопрос может показаться каким-то образом не ясно.
Как эти значения зависят от моего процессора (т. Е. Отношения между временем для этих операций и моего процессора) и JVM? Какие-либо предложения?
Я ищу понятные чтения ...
Ваш код не даст надежного бенчмарка по многим причинам. Среди них: JVM оптимизирует код, поэтому 'if (a ortis
Хорошо. Спасибо. Я понимаю, что вы имеете в виду, когда запускаете мой собственный код. Любые другие предложения по измерению прошедшего времени? –
Это не очень полезно, и в конечном итоге это никогда не будет. Если вы хотите надежно проверить простые инструкции на своем процессоре, вы должны написать эталон в сборке. Даже тогда не может быть тривиально разработать контрольный тест, который проверяет, что вы хотели протестировать, особенно если вы хотите протестировать ветку. – harold