Tengo una clase que hace algunos cálculos que requieren mucho tiempo. Estoy tratando de prueba de rendimiento que:¿Cómo puedo estar seguro de que el compilador no optimiza mi prueba de rendimiento?
int numValues = 1000000;
Random random = new Random();
startMeasuringTime();
double result;
for (int i = 0; i < numValues; i++) {
result = calculatorInstance.doSomeTimeConsumingCalculationsOn(random.nextDouble());
}
stopMeasuringTime();
estoy usando valores aleatorios por lo que el compilador no permitirá optimizar los cálculos por ser un millón de veces la misma. Pero ¿y los resultados? ¿El compilador ve que ya no se utiliza y omite la llamada (pero puede ver los efectos secundarios que podría tener la llamada al método?)
No quiero poner los resultados en algún lugar (en un file, array o System.out), porque creo que esto ralentizará la prueba con un trabajo que no quiero medir. O produce un OutOfMemoryError.
Gracias de antemano.
EDIT: cambiado el título un poco
posible duplicado de [¿Cómo puedo escribir una micro-referencia correcta en Java?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in -java) –
En cuanto a su prueba, no sé cuánto consume 'doSomeTimeConsumingCalculationsOn' pero si es * no mucho tiempo * probablemente comparará su método y' random.nextDouble() '. – gabuzo