Я хочу измерить скорость выполнения моего метода во время выполнения, но я не уверен, действительно ли то, что я сделал, действительно измеряет производительность мой метод, который я хочу или делаю что-то еще. Если он измеряет скорость работы моего метода, чем он надежный. Метод, который я хочу измерить скорость работы, называется FFMulFast и вычисляет умножение двух многочленов части поля Галуа (256). Примечание: я буду представлять только код, который имеет отношение к моему вопросу.Какой самый надежный способ измерения скорости выполнения методов во время выполнения в java
public class GaloaField {
// some fields here
public int FFMulFast(int a, int b){
int t = 0;;
if (a == 0 || b == 0)
return 0;
/* The multiplication is done by using lookup tables. We have used both logarithmic and exponential table for mul
* the idea is firstly look to Logarithmic table then add their powers and find the corresponding of this to exponential table */
t = (Log[(a & 0xff)] & 0xff) + (Log[(b & 0xff)] & 0xff);
if (t > 255) t = t - 255;
return Exp[(t & 0xff)];
}
//some other methods here
public void runABunch() { //method which will measure the performance speed of FFMulFast
long start = System.nanoTime();
int a=0x56;
int b=0xf4;
for (int i = 0; i < 5000000; i++)
FFMulFast(a,b);
long end = System.nanoTime();
System.out.println("Time: " + (end-start));
}
public static void main (String [] args) {
GaloaField galoa=new GaloaField();
galoa.runABunch();
}
Я не знаю, о «наиболее надежным», но вы, вероятно, следует начать со стандартным инструментом, как профайлер. – markspace
Ну, там ... нет. Время, в течение которого вы измеряете, скажем, выполнение, - это разница во времени между двумя событиями - запуск секундомера и его остановка. Но то, что произошло между событиями - полный GC, ОС остановил все потоки JVM и т. Д. И т. Д. - вы никогда не знаете. Поэтому более подходящим может быть бенчмаркинг - и есть способы сделать это, ну, правильно – micklesh
Я думал, что тот, который я сделал, также является бенчмаркингом. –