Ho una classe che esegue calcoli dispendiosi in termini di tempo. Sto cercando di test delle prestazioni è:Come posso essere sicuro che il compilatore non ottimizzi il mio test delle prestazioni?
int numValues = 1000000;
Random random = new Random();
startMeasuringTime();
double result;
for (int i = 0; i < numValues; i++) {
result = calculatorInstance.doSomeTimeConsumingCalculationsOn(random.nextDouble());
}
stopMeasuringTime();
che sto utilizzando valori casuali in modo che il compilatore non ottimizzare i calcoli per essere un milione di volte lo stesso. Ma per quanto riguarda i risultati? Il compilatore vede che non è più utilizzato e lascia la chiamata (ma poi, può vedere eventuali effetti collaterali che la chiamata al metodo potrebbe avere?)
Non voglio mettere i risultati da qualche parte (in un file, array o System.out), perché penso che questo rallenterà il test con un lavoro che non voglio misurare. O produrre un OutOfMemoryError.
Grazie in anticipo.
EDIT: cambiato il titolo un po '
possibile duplicato di [Come faccio a scrivere un corretto micro-punto di riferimento in Java?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in -java) –
Per quanto riguarda il test non so come consumo è 'doSomeTimeConsumingCalculationsOn' ma se è * non così a lungo * probabilmente il benchmarking sia il metodo e' random.nextDouble() '. – gabuzo