O JIT pode ser impedido de otimizar as chamadas de método?

Estamos construindo uma ferramenta para análise média de tempo de execução de programas Java Byte Code. Uma parte disso é medir tempos reais de execução. Então, tomamos um método arbitrário fornecido pelo usuário que pode ou não ter um resultado e pode ou não ter efeitos colaterais (exemplos incluem Quicksort, fatorial, loops aninhados simulados, ...) e executá-lo (usando reflexão), medindo o tempo decorrido. (Seja ou não benchmark de forma adequada é além do ponto aqui.)

No código de benchmarking, obviamente não fazemos nada com o resultado (e alguns métodos nem terão resultados). Portanto, não há como dizer o que o JIT pode fazer, e de fato observamos que parece otimizar todo o método referenciado de vez em quando. Como os métodos comparativos não são usados ​​isoladamente, isso torna o benchmark inútil.

Como podemos evitar que o JIT faça isso? Não queremos desativá-lo completamente, pois o benchmarking leva muito tempo e queremos, de qualquer maneira, comparar tempos de execução "reais" (assim, queremos que o JIT esteja ativodentro o método).

Estou cienteessa questão mas o cenário dado é muito estreito; nós não sabemos o tipo de resultado (se houver) e, portanto, não podemos usar o resultado de alguma forma, o JIT não parece tão inútil.