Подтвердить что ты не робот

Почему у iOS нет автоматической сборки мусора?

При разработке с помощью Objective-C в iOS управление памятью должно выполняться разработчиком. Некоторые из других мобильных платформ используют автоматическую сборку мусора для устранения необходимости управления памятью.

Каковы могут быть причины, по которым сбор мусора не используется на устройствах iOS?

4b9b3361

Ответ 1

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

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

Ответ 2

В WWDC 2011 Apple объяснила, что они не хотят собирать мусор на своих мобильных устройствах, потому что они хотят, чтобы приложения могли работать с наилучшим использованием предоставленных ресурсов и с большим детерминизмом. Проблема с сборкой мусора связана не только с тем, что объекты накапливаются с течением времени, пока сборщик мусора не заработает, но у вас нет никакого контроля над сбором сборщика мусора. Это приводит к недетерминированному поведению, которое может привести к замедлению это может произойти, когда вы не хотите их.

Нижняя строка. Вы не можете сказать: "Хорошо. Я знаю, что эти объекты будут освобождены в X-момент времени и не будут сталкиваться с другими событиями, которые происходят".

Ответ 3

Основная причина - загрузка и производительность памяти. Счетчик ссылок имеет меньший профиль памяти, поскольку он позволяет использовать количество, используемое приложением, намного больше, чем подсчет ссылок. Кроме того, есть проблема с производительностью в том, что когда сборщик мусора работает, другие потоки должны быть остановлены. Это не очень большая проблема для Macintosh с быстрыми многоядерными процессорами, но может привести к заиканию пользовательского интерфейса на мобильных устройствах.

В любом случае дебаты могут быть спорными. Clang/LLVM только что добавила новую функцию автоматический подсчет ссылок. Это позволяет анализировать возможности автоматического добавления сохранений, выпусков и автореализаций, чтобы программатор тоже не имел.