Почему очки медленные - PullRequest
       4

Почему очки медленные

5 голосов
/ 11 сентября 2010

Мне нужно пройти х / у.Я просто использовал java.awt.Point.Я делаю это много, учитывая, что это характер приложения, но тонны медленнее, чем обычные массивы.Я также попытался создать свою собственную «FastPoint», которая представляет собой просто int x / y и очень простой конструктор классов, который тоже очень медленный.

Время в миллисекундах.

java.awt.Point: 10374
FastPoint: 10032
Массивы: 1210

public class FastPoint {  

    public int x;  
    public int y;  

    public FastPoint(int x, int y) {  
            this.x = x;  
            this.y = y;  
    }
}

Jvisualvm говорит, что Point (либо awt, либо моя) использует по сравнению с тоннами памятик простому массиву int [].

Я полагаю, это просто накладные расходы из-за необходимости создания объекта вместо базового типа?Есть ли способ настроить или оптимизировать этот класс Point?Я уже переключился на базовые массивы int (которые теперь намного быстрее), но просто пытаюсь понять, почему это медленно, и если есть что-то, что я могу с этим поделать?

Тестовый код:

for (int i = 0; i < maxRuns; i++) { 
    point = new Point(i,i); 
}

for (int i = 0; i < maxRuns; i++) { 
    a[0] = i; a[1] = i; 
}

1 Ответ

9 голосов
/ 11 сентября 2010

Ваш тестовый жгут смещен: вы создаете новую точку в каждой итерации, но создаете массив только один раз.Если переместить выделение массива в цикл, разница будет не такой большой, а массивы на самом деле немного медленнее:

Точка: 19 нано секунд / итерация

Массив: 47 нано секунд / итерация

Это, как и ожидалось, так как при доступе к массиву необходимо выполнять проверку границ, а назначение полей - нет (JIT, по-видимому, встроил конструктор точек).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...