Производительность циклов в Java (Android)

Протестировал скорость работы всех типов циклов на Андроиде/Java SE. Разница между самым быстрым циклом и самым медленным составила в среднем 69,7% и в лучшем для самого быстрого случае 109,8%.

Тестировалось на HTC Wildfire (Andoid 2.2.1). Число запусков ~10000, т.е. выборка для практического применения результатов вполне приличная.
Во всех циклах запускалось стандартное суммирование переменной цикла для контроля корректности результата. При тестирование циклы равномерно менялись местами (что бы исключить возможное влияние первого запуска).

Пример кода

concat не делал, оно тут погоды не делает
long timeStart;
long timeEnd;
long s;
String strOut = «»;
int size = 300_000;
int[] arrNums = newint[size];
for(int i=0; i < size; i++)
{
arrNums[i] = 1;
}
for(int r=0; r < 2500; r++)
{
strOut = «id=»+r + «\n»;
s = 0;
timeStart = Calendar.getInstance().getTimeInMillis();
int iw=0;
while (iw < size) {
s+=arrNums[iw];
iw++;
}
timeEnd = Calendar.getInstance().getTimeInMillis();
strOut = strOut + «While: » + (long)(timeEnd — timeStart) + » ms (s=» + s + «)\n»;
s = 0;
timeStart = Calendar.getInstance().getTimeInMillis();
for(int i_fa : arrNums) s+=arrNums[i_fa];
timeEnd = Calendar.getInstance().getTimeInMillis();
strOut = strOut + «For_array: » + (long)(timeEnd — timeStart) + » ms (s=» + s + «)\n»;
s = 0;
timeStart = Calendar.getInstance().getTimeInMillis();
for(int i_f=0; i_f < size; i_f++) s+=arrNums[i_f];
timeEnd = Calendar.getInstance().getTimeInMillis();
strOut = strOut + «For_standart: » + (long)(timeEnd — timeStart) + » ms (s=» + s + «)\n»;
s = 0;
timeStart = Calendar.getInstance().getTimeInMillis();
int idw = 0;
do {
s+=arrNums[idw];
idw++;
} while (idw < size);
timeEnd = Calendar.getInstance().getTimeInMillis();
strOut = strOut + «Do_While: » + (long)(timeEnd — timeStart) + » ms (s=» + s + «)\n»;
//tvOut.setText(strOut);
Log.e(TAG, strOut);
}

Результаты выводятся в лог под дальнейшую обработку в Excel

Результаты

For array (мс) For standart (мс) Do While (мс) While (мс)
Среднее 147,0 110,9 99,5 110,3
Мин 140 105 94 105
Макс 443 346 495 291

 

Результаты после отбрасывания лучшего и худшего

For array (мс) For standart (мс) Do While (мс) While (мс)
Среднее 146,9208 110,8214 99,41190108 110,369
Мин 141 106 95 106
Макс 418 339 356 272

 

Неожиданно присутствует значительный разброс времени, достигающий 500% (500% Карл!!!) И это не единичные отдельные случаи. ~1% числа запусков по всем циклам превосходит 200. Возможно Java Android этому причина. На php такого не наблюдалось. Потому для пущей корректности нужно пустить этот же код на серверной Java, где Андроид будет исключен из процесса или хотя бы на другом смартфоне.

Неожиданно Do While лидирует со значительным отрывом.

Ожидаемо For по предустановленному массиву показал наихудший результат (аналогичный цикл в php foreach в плане скорости также оставляет желать лучшего).

 

Циклы по убыванию скорости

  1. Do While (100%)
  2. While (110,9%)
  3. For standart (111,5%)
  4. For array (147,7%)

Кто решит проверить на своем андроиде ссылка на гитхаб


Количество просмотров :478

Не получается залогинится в vesta панель? — Решено

Проблема
Вдруг ни с того ни с сего веб-интерфейс Vesta Control Panel перестал впускать с правильным логином-паролем. Все сервисы ВПСки и все сайты работают.

Не получается залогинится vesta панель

Invalid username or password

Веб интерфейс Vesta доступен по адресу https://its.my.vps.ip:8083/login/

Ось: CentOS 6.5 Minimal
Версия Vesta панели 0.9.8

У меня на этих панельках три впски, взятых по промо с ценником по $8/год, авторизация слетела только на одной. На стороне ноды никакие операции не проводились, потому явно что-то внутреннее.

Причина — в моем случае полностью закончилось место на диске, так что панель даже сессию при логине не могла сохранить.
Решение — подключаемся по ftp и удаляем часть устаревших данных, например бекапы или статистику — и все, логин проходит успешно.

Нюанс — альтернативное решение — ни по фтп, ни в этой админке быстро посмотреть куда утекло 20-60Гб диска нельзя, потому проще подключиться через PuTTY и воспользоваться mc, где посмотреть размеры дир в метрах можно по Ctrl-Space или меню Command — Show directory sizes (предварительно выделив диры).

CentOS размеры папок в мб

CentOS размеры папок в мб

Панелька стабильная, не требовательная к ресурсам, на 500Мб ОЗУ спокойно держит с десяток WP + штук 5 сайтов чисто на php с суммарным дейли трафом прилично за 10k. И к тому же бесплатная.


Количество просмотров :3514

Directadmin проблемам с кодировкой сайта, выставленной по умолчанию!

screenshot-enhanced[1]Клиент дал хостинг с хостинг панелью Directadmin но она по умолчанию вставляет ненужный мне тег header закголовок кодировки, Читать продолжении статьи: Directadmin проблемам с кодировкой сайта, выставленной по умолчанию! »


Количество просмотров :4126

Автоматическое наполнение таблицы — SQL Модуль CatFace — SEO.

Этим запросом можно наполнить таблицу с SEO описанием для модуля DLE CatFace для категорий,
ПО шаблону заданному в SQL
Читать продолжении статьи: Автоматическое наполнение таблицы — SQL Модуль CatFace — SEO. »


Количество просмотров :4530

Putty автоматическое пере подключение при обрыве связи

Я люблю работать c моими серверами с помощью Putty по SSH. Я думаю, что это больше чем просто клиент SSH, сама программа очень класная!
Читать продолжении статьи: Putty автоматическое пере подключение при обрыве связи »


Количество просмотров :5132

Решено: Upstream sent too big header while reading response header from upstream // NginX PHP FPM

Решено: Upstream sent too big header while reading response header from upstream when using NginX PHP FPM
Когда вы используете NginX , а в качестве upstream PHP — FPM server.

salmon_2[1]
Читать продолжении статьи: Решено: Upstream sent too big header while reading response header from upstream // NginX PHP FPM »


Количество просмотров :8588

PHP скрипт конвертации Mysql InnoDB в ENGINE MyISAM.

Этот PHP скрипт позволит вам сконвертировать все таблицы InnoDB доступные пользователю $dbuser на сервере mysql из InnoDB в БД ENGINE MyISAM.
Читать продолжении статьи: PHP скрипт конвертации Mysql InnoDB в ENGINE MyISAM. »


Количество просмотров :4710

Понижение версии PHP 5.4 до 5.3 в Debian 7

Debian Wheezy по умолчанию стоит PHP версии 5.4.*
Если эта весрия пхп слишком новая для ваших приложений то для того что бы поставить PHP версии пониже нужно выполнить следующее:
,
downgrading to PHP 5.3.

Читать продолжении статьи: Понижение версии PHP 5.4 до 5.3 в Debian 7 »


Количество просмотров :5994

БЛОК ВЫВОДА ПОСЛЕДНИХ СООБЩЕНИЙ С ФОРУМА для IPB 3 (для wordpress)

БЛОК ВЫВОДА ПОСЛЕДНИХ СООБЩЕНИЙ С ФОРУМА для IPB 3 Читать продолжении статьи: БЛОК ВЫВОДА ПОСЛЕДНИХ СООБЩЕНИЙ С ФОРУМА для IPB 3 (для wordpress) »


Количество просмотров :11938

MYSQL , IPB Как удалить сообщения пользователей в диапазоне дат, (спамеров) ?

82808,1279604742,2[1]В знаменитом форумном движке IPB  на PHP бывает так,  что про форум забыли , Читать продолжении статьи: MYSQL , IPB Как удалить сообщения пользователей в диапазоне дат, (спамеров) ? »


Количество просмотров :6434