очистка кеша Java\CPU программно

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

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


person shaydel    schedule 17.02.2013    source источник
comment
Это звучит более вероятно, что JIT-компилятор пинает его. Как решить это выше моего понимания...   -  person MadProgrammer    schedule 17.02.2013
comment
почему бы просто не запустить его на некоторое время, чтобы запустить jit, а затем начать измерения?   -  person radai    schedule 17.02.2013
comment
stackoverflow.com/questions/504103/   -  person Brian Roach    schedule 17.02.2013
comment
Почему это проблема? JIT ускоряет работу, и это реальная производительность.   -  person Brian Roach    schedule 17.02.2013


Ответы (1)


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

Вы можете изменить количество вызовов перед оптимизацией метода, установив параметр -XX:CompileThreshold (значение по умолчанию — 10 000) или исключая оптимизацию вашего класса вообще.

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

person assylias    schedule 17.02.2013
comment
Или он может полностью отключить JIT-компилятор... хотя это означает, что он будет измерять код, работающий нереалистичным образом. Цифры могут не отражать реальную производительность. - person Stephen C; 17.02.2013