Czy można uniemożliwić JIT optymalizację odbieranych połączeń metod?

Budujemy narzędzie do średniej analizy runtime case programów Java Byte Code. Jedną z nich jest pomiar rzeczywistych czasów działania. Więc weźmiemy dowolną metodę dostarczoną przez użytkownika, która może, ale nie musi, dać wynik i może mieć efekty uboczne (np. Quicksort, silnia, fikcyjne pętle zagnieżdżone, ...) i wykonać ją (używając odbicia), mierząc czas, który upłynął. (Niezależnie od tego, czy w ogóle prawidłowo przeprowadzamy testy porównawcze).

W kodzie benchmarkingu oczywiście nie robimy nic z wynikiem (a niektóre metody nie będą nawet miały wyników). Dlatego nie wiadomo, co może zrobić JIT, i rzeczywiście zauważyliśmy, że czasami optymalizuje on całą metodę testową. Ponieważ metody benchmarkowe nie są używane w rzeczywistości, czyni to test bezużyteczny.

Jak możemy temu zapobiec? Nie chcemy go całkowicie wyłączać, ponieważ wtedy benchmarking trwa wieki, a mimo to chcemy porównywać „rzeczywiste” środowiska wykonawcze (dlatego chcemy, aby JIT był aktywny)wewnątrz metoda).

Jestem świadomyto pytanie ale dany scenariusz jest zbyt wąski; nie znamy typu wyniku (jeśli taki istnieje) i dlatego nie możemy w jakiś sposób wykorzystać wyniku, JIT nie uważa go za bezużyteczny.

questionAnswers(3)

yourAnswerToTheQuestion