Я собираюсь измерить производительность некоторого кода. Для этой цели я ввел следующий метод:Запишите результат в volatile var, чтобы исключить удаление мертвого кода в тестах
def timed[T](body: => T) = {
val start = System.currentTimeMillis
blackHole = body
val end = System.currentTimeMillis
end - start
}
В blackHole
переменных введено для того, чтобы сохранить body
результат. Это делается для предотвращения удаления кода ошибки от JVM.
В некоторых книгах есть утверждение, что blackHole
должен быть объявлен следующим образом:
@volatile
var blackHole: Any = _
Почему следует отметить переменную volatile
?
Если ваш метод работает в течение> 1сек., Вы, вероятно, должны использовать инфраструктуру microbenchmark, такую как jmh, см. Http://stackoverflow.com/q/504103/1362755 – the8472
Просьба ссылаться на книгу. И в идеале процитируйте все высказывание, которое вы хотели бы уточнить. Также название вашего вопроса не соответствует хорошо спрошенному здесь вопросу – Ivan
@ the8472 Да, я знаю, но в моем конкретном случае я пытаюсь понять, почему здесь волатильность имеет значение. – Aliaxander