2015-02-28 1 views
1

в моем коде Java Я подозреваю, что размер java.util.ArrayDeque влияет на производительность, но я хотел подтвердить здесь, если это может быть так.Размер окна java-массива против производительности

while (!otherClass.getDeque().isEmpty()){ 
    Trajectory t1 = otherClass.getDeque.remove(); 
    Runnable tr1 = new TrajectoryThread(); 
    Thread thread1 = new Thread(tr1); 
    thread1.start(); 

if (!otherClass.getDeque().isEmpty()){ 
    Trajectory t2 = otherClass.getDeque.remove(); 
    Runnable tr2 = new TrajectoryThread(); 
    Thread thread2 = new Thread(tr2); 
    thread2.start(); 

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

Операции, которые я использую, - remove(), add(), isEmpty(), а также получение Deque из другого класса. При выборе времени каждой итерации я нахожу, что для размера Deque из 4421 объектов требуется 7756 миллисекунд. Хотя для Deque размером 103 объекта, он занимает 43 miliseconds.

+0

Вы забыли указать, какую версию использования Deque вы используете. – laune

+0

«Получение [объекта] из другого класса» на самом деле не является «операцией». – laune

+0

Не полагайтесь на результаты измерений времени вне манжеты. Как вы оценили? – laune

ответ

1

Когда вы сталкиваетесь с такими проблемами производительности, в большинстве случаев правильный подход заключается в получении хороших данных мониторинга производительности, прежде чем говорить о том, какая часть вашей программы медленная. Для этого вы можете использовать инструмент, например VisualVM.

Если вам интересно, если java.util.ArrayDeque операции несут ответственность за замедление вашей программы, то ответ почти наверняка нет, потому что их время выполнения в значительной степени доминируют над головой создания потоков и показ моделирования. ArrayDeque s очень быстро. Они запускают 3 операции, которые вы указали в своем комментарии в постоянное время (точнее, add работает в constant amortised time.); менее теоретически эти операции выполняются с использованием манипуляций с низким уровнем массивов, что на практике очень быстро. Поэтому я бы не стал беспокоиться об этом.

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

+0

да, оказывается, это была функция в другом классе. – user3647101