2013-02-17 2 views
2

Я пытаюсь проверить некоторые вставки очереди и удаление метки времени объектов. После нескольких тестовых прогонов я добился значительного повышения скорости в 80 раз лучших результатов по одному и тому же коду. Это явно показывает результат кэширования либо JVM, либо аппаратным \ cpu cache, но я хочу получить свежие результаты для каждого запуска.очистка Java CPU cache программно

Есть ли способ очистить оба \ этих из кэша программно из кода Java?

+0

Это, скорее всего, будет компилятор JIT, пиная его. Как решить это за меня ... – MadProgrammer

+1

Почему бы не просто запустить его какое-то время, чтобы запустить jit, а затем начать измерение? – radai

+2

http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java –

ответ

5

Возможно, это связано с тем, что JIT начал использовать. JIT скомпилирует ваш байт-код в машинный код после определенного количества прогонов, чтобы сделать его более эффективным.

Вы можете изменить количество вызовов до того, как метод будет оптимизирован, установив опцию -XX:CompileThreshold (значение по умолчанию - 10 000) или на excluding your class from being optimised at all.

Однако я не уверен, почему вы хотите отключить компилятор и заставить вашу программу работать медленнее.

+2

Или он может полностью отключить компилятор JIT ... хотя, делая это, он будет измерять код, работающий нереалистично. Цифры могут не указывать на реальную производительность. –