Является ли сборщик мусора Android приостановкой других приложений во время работы?
Я нашел некоторую информацию о сборщике мусора Android, которые противоречат мне.
Android Devevelopers руководство говорит:
Android 3.0-первая версия платформы, предназначенная для работы на одно-или многоядерные процессорные архитектуры. Разнообразие изменения в виртуальной машине Dalvik, Bionic library и в других местах добавляют поддержку для симметричной многопроцессорной обработки в многоядерных средах. Эти оптимизация может принести пользу всем применения, даже те которые однопоточный. Например, с двумя активными ядрами, однопоточное приложение может по-прежнему видеть повышение производительности, если мусор Dalvik коллектор работает на втором ядре. Система это устроит автоматически."
хорошо, теперь другое дело
по этой ссылке: Архитектура Виртуальной Машины Dalvik android использует Марк и развертки aproach.
текущий стратегия в сборщике мусора Dalvik-сохранить отметку биты, или биты, указывающие, что определенный объект "доступный" и поэтому не должно быть мусора, отдельных из другой памяти.
Если мы проверим, как работает mark и sweep по этой ссылке: Марк и развертки алгоритм сбора мусора мы можем видеть это:
основным недостатком подхода пометки и развертки является тот факт, что эта нормальная программа выполнение приостановлено, пока мусор алгоритм сбора. В частности, это может быть проблемой в программа, которая взаимодействует с человеком или должна удовлетворять ограничения выполнения в реальном времени. Например, интерактивный приложение, использующее сборку мусора mark-and-sweep, становится периодически не реагирует.
Итак, мой вопрос, как это реально работает? Делает ли сборщик мусора паузу все, пока он работает, или он способен работать полностью независим от другого активного процессорного ядра?
3 ответов
Dalvik VM в пряники и за их пределами версия использует в основном параллельная частичная коллекция сборщик отброса с временами перерыва обычно вокруг 5ms. Поэтому да, GC влияет на другие приложения, останавливая их, но параллельный алгоритм GC способен минимизировать эти паузы.
вы должны смотреть на :
- технические данные Android мусоровоза
- тут DalvikVM сборщик мусора остановить всю виртуальную машину?
В общем, теория сбора мусора [Сбор Мусора Wiki] объясняю:
остановить мир сборщики мусора полностью останавливают выполнение программы для запуска цикла сбора
дополнительные и параллельные сборщики мусора предназначены для уменьшения этого разрыва чередование их работы с деятельность из основной программы. Инкрементальный сборщик мусора выполните цикл сбора мусора в дискретных фазах, с разрешенным выполнением программы между каждая фаза (а иногда и во время некоторых фаз).
- параллельные сборщики мусора не останавливайте выполнение программы вообще, за исключением, возможно, кратковременного сканирования стека выполнения программы.
полная независимость довольно невозможна: сборщик мусора и программа используют одну и ту же память и должны как-то общаться. Даже "без паузы" GCs, как Azul (кстати, хорошее чтение:http://www.artima.com/lejava/articles/azul_pauseless_gc.html), имеют технические паузы. Dalvik, вероятно (чистая догадка, основанная на анекдотических доказательствах и ресурсах, которые, вероятно, влились в JVMs в течение последних 15 лет такими, как IBM, Sun и Oracle), отстает от новейших технологий, найденных в JVMs, поэтому я подозреваю, что паузы будут длиннее.
Это не приостановит другие приложения, это может приостановить ваше приложение. Метка и зачистка не есть чтобы остановить всю обработку, это самый простой способ сделать это. Вероятно, у него есть некоторые моменты, когда он приостанавливает выполнение, а другие-нет. Единственный реальный способ сказать-посмотреть на код Dalvik VM. И я бы не рассчитывал, что это будет один и тот же ответ во всех версиях Android.