Почему замена Objects (класса) на некоторые массивы (примитивные типы данных) в java значительно сокращает время выполнения? - PullRequest
0 голосов
/ 27 января 2020

В моей программе у меня есть следующий класс:

   private static class Node
   {
      // True if '1', false otherwise (i.e. '0')
      public final boolean isDigitOne;

      // The number represented in the tree modulo the input number
      public final int val;

      // The parent node in the tree
      public final Node parent;

      public Node(boolean isDigitOne, int val, Node parent)
      {
         this.isDigitOne = isDigitOne;
         this.val = val;
         this.parent = parent;
      }
   }

Я заменил этот класс двумя массивами следующего внутри метода другого класса.

boolean[] product0 = new boolean[num]; 
int[] product1 = new int[num];

Остальные Программа очень похожа, реализация класса создает объект, когда это необходимо, когда реализация массива выделяет максимально необходимую память в начале выполнения.

Я измеряю время выполнения в обоих случаях.

Я заметил, что для меньших значений num время выполнения почти такое же. Но для большего значения реализация массива выполняется намного быстрее.

Вот сравнение:

enter image description here

Мой вопрос Почему реализация массива выполняется быстрее?

Реализация класса доступна по следующей ссылке как «Ответ 3» Как найти наименьшее число с 0 и 1, которое делится на данное число

1 Ответ

0 голосов
/ 27 января 2020

Большая часть этого будет из-за расположения данных в памяти. Массивы объектов напрямую не хранят данные рядом друг с другом в памяти, вместо этого они хранят ссылку на местоположение, где данные хранятся в памяти. Это означает, что после получения доступа к местоположению массива и получения данных из массива система должна затем извлечь данные из местоположения в памяти, на которое указывает значение массива. Однако в массивах примитивных данных данные хранятся непосредственно в массиве. Это означает, что для доступа к массиву система должна сделать только один поиск вместо двух, чтобы получить доступ к массиву, а затем получить доступ к объекту. Системы обычно работают так быстро, что это заметно не заметно для небольших объемов данных, но это может стать очевидным при увеличении объема данных.

...