2013-03-10 3 views
3

Я использую Eclipse с плагином для работы VisualVM. Теперь VisualVM говорит о том, что вызов метода функции возвращает всегда вокруг звука 180 мс, в то время как, если я использую ручной метод:Результаты VisualVM отличаются от ручных измерений

long start = System.nanoTime(); 
searchConnections(bsTree, connectionList); 
double elapsedTimeInSec = (System.nanoTime() - start) * 1.0e-6; 

я получаю около 50мс! Почему существует разница? Так разве измерения в VisualVM не так? Мне нужны измерения для какого-то проекта, поэтому важно, чтобы они были настолько точными, насколько они могут быть.

ответ

1

Чтобы ответить на ваш вопрос, нет простого способа узнать, почему именно значения различны из-за характера JVM и того, как он будет оптимизировать код во время выполнения. Не говоря уже о том, что System.nanotime() - это реализация на платформе, и я не буду полностью доверять ее ценности ни для чего.

Я бы с большей вероятностью доверил результат VisualVM над встроенными измерениями просто потому, что VisualVM фактически его измеряет. Если вы обеспокоены бенчмаркингом или хотите сосредоточиться на получении точных результатов, я бы предложил использовать этот инструмент, например Caliper.

Смежные вопросы