Это самый надежный способ измерить скорость работы методов во время выполнения в java

Я хочу измерить скорость выполнения моего метода во время выполнения, но я не уверен, действительно ли то, что я сделал, измеряет производительность моего метода, который я хочу, или делает что-то еще. Если он измеряет скорость работы моего метода, чем то, насколько он надежен. Метод, который я хочу измерить быстродействием, называется FFMulFast, и он вычисляет умножение двух полиномов, составляющих Поля Галуа (256). Примечание: я представлю только код, который имеет отношение к моему вопросу.

  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();

 }

person Barlet South    schedule 25.05.2016    source источник
comment
Я не знаю, какой из наиболее надежных, но вам, вероятно, следует начать со стандартного инструмента, такого как профилировщик.   -  person markspace    schedule 25.05.2016
comment
Ну нет ... нет. Время, которое вы измеряете, скажем, для выполнения, - это разница во времени между двумя событиями - запуском секундомера и его остановкой. Но что произошло между этими событиями - полный сборщик мусора, ОС остановила все потоки JVM и т. Д. И т. Д. - вы никогда не узнаете. Так что более подходящим может быть сравнительный анализ - и есть способы сделать это, ну, ну, правильно   -  person micklesh    schedule 25.05.2016
comment
Я думал, что тот, который я сделал, тоже тестирует.   -  person Barlet South    schedule 25.05.2016


Ответы (2)


Взгляните на jmh - http://openjdk.java.net/projects/code-tools/jmh/

Дополнительная информация о микробенчмаркинге:

  1. http://shipilev.net/talks/devoxx-Nov2013-benchmarking.pdf
  2. https://www.youtube.com/watch?v=vb62qrhfrtc
  3. Google "микробенчмаркинг java"
person Alex K.    schedule 25.05.2016

Это прекрасно, когда вы запускаете свою программу в автономном режиме. Вы можете рассмотреть возможность профилирования / инструментария для анализа в реальном времени в производственной среде, например в среде. Ниже в посте есть очень хорошее введение для того же.

http://blog.javabenchmark.org/2013/05/java-instrumentation-tutorial.html

person itsme_seenu    schedule 25.05.2016