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

Я нашел некоторую информацию об сборщике мусора Android, которые противоречат мне.

Руководство Android Devevelopers Guide:

Android 3.0 – первая версия платформы, предназначенная для работы на одном или нескольких процессорных архитектурах. Различные изменения в Dalvik VM, Bionic-библиотеке и других местах обеспечивают поддержку симметричной многопроцессорности в многоядерных средах. Эти оптимизации могут принести пользу всем приложениям, даже однопоточным. Например, с двумя активными ядрами однопоточное приложение может по-прежнему видеть повышение производительности, если сборщик мусора Dalvik работает на втором ядре. Система автоматически установит это. "

Хорошо, теперь другая вещь

Согласно этой ссылке: Android-разработчик виртуальной машины Dalvik использует марку и прокрутку aproach.

Текущая стратегия в сборщике мусора Dalvik заключается в том, чтобы сохранить метки бит или биты, указывающие, что конкретный объект «доступен» и, следовательно, не должен собираться мусором, отдельно от другой кучной памяти.

Если мы проверим, как работают метки и развертки по этой ссылке: Mark and Sweep Garbage Collection Algorithm , мы можем это увидеть:

Основным недостатком подхода mark-and-sweep является тот факт, что это обычное выполнение программы приостанавливается, пока выполняется алгоритм сбора мусора. В частности, это может быть проблемой в программе, которая взаимодействует с человеческим пользователем или которая должна удовлетворять ограничениям выполнения в реальном времени. Например, интерактивное приложение, использующее сборку мусора маркировки и разметки, периодически перестает реагировать.

Итак, теперь мой вопрос: как это работает? Собирает ли сборщик мусора все, пока он работает, или способен ли он полностью автономно работать на другом активном ядре процессора?

В Dalvik VM в версии Gingerbread и за ее пределами используется сборщик мусора с большей частью параллельной сборки с периодом паузы, обычно около 5 мс. Поэтому да, GC влияет на другие приложения, останавливая их, но алгоритм параллельного GC способен минимизировать эти паузы.

Вы должны посмотреть:

  • Технические детали Android Garbage Collector
  • Неужели DalvikVM Garbage Collector останавливает всю ВМ?

В общем, теория коллекции мусора [Garbage Collection Wiki] объясняет:

  • Сборщики мусора Stop-the-world полностью прекращают выполнение программы для запуска цикла сбора

  • Инкрементальные и совпадающие сборщики мусора предназначены для уменьшения этого нарушения, чередуя свою работу с деятельностью из основной программы. Инкрементальные сборщики мусора выполняют цикл сбора мусора в дискретных фазах, при этом выполнение программы допускается между каждой фазой (а иногда и на некоторых этапах).

  • Одновременные сборщики мусора вообще не останавливают выполнение программы, за исключением, возможно, ненадолго, когда сканируется стек выполнения программы.

Полная независимость довольно невозможна: сборщик мусора и программа используют одну и ту же память и должны каким-то образом общаться. Даже «безрезультатные» GC, такие как Azul (btw, good read: http://www.artima.com/lejava/articles/azul_pauseless_gc.html ), имеют технические паузы. Вероятно, Dalvik (чистая догадка, основанная на анекдотических доказательствах и ресурсах, которые в течение последних 15 лет, вероятно, выливались в JVM, такими как IBM, Sun и Oracle) за новейшие технологии, найденные в JVM, поэтому я подозреваю, что паузы будут длиннее ,

Он не останавливает другие приложения, это может приостановить ваше приложение. Знак и развертка не должны останавливать всю обработку, это просто самый простой способ сделать это. Вероятно, у него есть некоторые моменты, когда он приостанавливает выполнение, а другой – нет. Единственный реальный способ сказать – посмотреть на код Dalvik VM. И я не буду рассчитывать на то, что это тот же ответ во всех версиях Android.

Intereting Posts
Как получить сохраненный идентификатор в SugarORM? Утечка памяти FragmentStatePagerAdapter (вложенные фрагменты с помощью viewpager) Может ли телефон Android использовать библиотеку Windows DirectX? Когда Android SharedPreferences commit () возвращает false? Не удалось переименовать инструменты каталога в temp \ ToolPackage.old01 в C: \ android-sdk-windows Где разместить существующую базу данных в проекте студии android Android обновляет список фрагментов из родительской активности Android: Как использовать mediaController в классе обслуживания? Как отображать только изображения в кэш-памяти в ViewPager с помощью Universal Image Loader Android? Android N – как проверить, подписан ли apk с помощью схемы v2 Добавление библиотек поддержки в Android-проект Декодирование аудиофайлов и повторное кодирование в желаемый формат PCM: 44,100 кГц, 2 канала, 16 бит Eclipse Android Activity Wizard не создает новые действия Поддержка языковых индексов для SDK, но не PhoneGap Не удалось создать проект Android F # – Visual Studio 2015 Xamarin Community