Изменение стиля кодирования из-за Android производительность GC, как далеко слишком далеко?

Я продолжаю слышать, что приложения Android должны попытаться ограничить количество объектов, созданных для сокращения рабочей нагрузки на сборщике "мусора". Это имеет смысл, который Вы не можете хотеть к созданным крупным числам объектов отследить на месте ограниченной памяти, например, на традиционном серверном приложении, созданном, 100 000 объектов в течение нескольких секунд не будут неслыханны.

Проблема состоит в том, как далеко я должен взять это? Я видел, что тонны примеров приложений Android, полагающихся на статическое состояние в порядке, предположительно, ", ускоряют вещи". Увеличение числа экземпляров, которые должны быть собраны "мусор" от десятков до сотен, действительно делают это большим из различия? Я могу предположить изменяться, мой стиль кодирования к теперь созданным сотням тысяч объектов как Вы мог бы иметь на полноценном сервере EE Java, но доверие набору статического состояния, чтобы (предположительно), сократить количество объектов, которые будут собраны "мусор", кажется нечетным.

Сколько стоит действительно необходимый для изменения стиля кодирования для создания приложений для Android производительности?

10
задан 2 revs, 2 users 100% 7 February 2012 в 10:12
поделиться

2 ответа

Совет «избегать выделения» обычно относится к игровым циклам. ВМ должна приостановить работу для сбора мусора, и вы не хотите, чтобы это происходило, пока ваша игра анимируется со скоростью 30 кадров в секунду. Если вы не выделяете какие-либо объекты, виртуальной машине не нужно будет собирать мусор для освобождения памяти. Если у вас есть игра, которая должна работать без видимых пользователем сбоев, вам следует подумать об изменении кода в соответствующих частях, чтобы минимизировать или исключить выделение.

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

Будущие улучшения Dalvik GC (например, сбор данных по поколениям) должны сделать это менее важной проблемой.

10
ответ дан 3 December 2019 в 23:12
поделиться

Я бы сказал, что это действительно зависит от того, что вы делаете и каков ваш стиль кодирования Теперь. Всегда необходимо помнить об аппаратных ограничениях мобильного устройства и соответствующей программы, но, опять же, полезно знать об этом независимо от того, где будет запускаться ваше приложение. Если вы выполняете много действительно интенсивных вычислений, которые необходимо обновлять в режиме реального времени или что-то вроде игры, вы можете изучить возможность использования NDK, но если вы просто делаете обычные вещи, управляемые пользователем, это не должно быть так плохо. . Я бы посоветовал постараться быть экономным, но не слишком беспокоиться об оптимизации, пока не почувствуете, как она работает.

4
ответ дан 3 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: