В Windows Phone / Xbox и Android отсутствует поддержка сбора мусора поколений. Это расстраивает многих программистов. Кажется, есть законная техническая причина, но я не могу понять это.
Текущие телефоны имеют больше памяти и, вероятно, лучшие процессоры, чем настольные компьютеры / ноутбуки, работающие на .NET 1.1 с поколением GC еще в 2001 году, и я не могу представить себе никаких причин, по которым процессоры ARM будут хуже в поколениях GC, чем x86. Также не требуется многозадачность на телефонах и консолях, поэтому относительно больше свободного места в куче.
Так что же дает?
Изменить: несколько моментов, чтобы уточнить:
- Эти платформы используют сборщик мусора исключительно для приложений, поэтому мой вопрос не в том, почему GC не поддерживается; мой вопрос о том, почему не сборка мусора поколений .
- Причина, по которой люди разочарованы отсутствием GC поколений, заключается в том, что GC без поколений крайне неэффективен. (Это означает, что срок службы батареи не является причиной.)
- Я верю, что есть некая техническая причина отсутствия поддержки GC поколений. Это не риторический вопрос.
java
.net
android
windows-phone-7
garbage-collection
Рей Миясака
источник
источник
Ответы:
Я думаю, что самая большая проблема - это время автономной работы. Сборка мусора - это удобство разработчика, приобретаемое за счет дополнительных циклов ЦП на компьютере пользователя . Когда ваш ЦП подключен (настольный компьютер) или имеет относительно большую батарею (ноутбук), ваши пользователи с большей готовностью будут платить за удобство разработчиков за счет дополнительной энергии, потребляемой ЦП во время сбора мусора. Когда батарея относительно мала, пользователи могут быть не такими щедрыми. Они могут захотеть эту дополнительную планку для себя - возможно, поговорить со своими друзьями или убить несколько лишних свиней в смертельной схватке со злыми птицами.
Независимо от причин пользователей, разработчики ОС не хотят формировать представление о том, что устройства, работающие на их ОС, разряжают батарею быстрее, чем устройства, на которых установлена ОС их конкурентов. Таким образом, они покупают лучшее восприятие ожидаемого времени автономной работы своих устройств за счет удобства разработчиков: для них ваша боль не составляет большого труда, пока пользователи довольны устройствами.
источник
Я думаю, что это не техническая причина, а то, что разработчики для этих телефонных платформ просто еще не приложили усилий. Я знаю, что это не тот ответ, на который вы надеетесь, но если вы занимались какой-либо мобильной разработкой, вы, вероятно, заметили, что есть много низко висящих фруктов. Вероятно, у них просто не было времени написать несколько реализаций GC, точно настроить их все и выбрать ту, которая лучше всего подходит. Зачем кому-то тратить время на то, чтобы заново изобретать колесо, когда вместо этого они могут выпускать новые, броские, плохо продуманные API? ;)
FWIW, и как подтверждение моей теории, у новой среды выполнения Android (ART) действительно есть GC поколения, и они планируют иметь компактную GC в будущем .
источник
Существует несколько дополнительных затрат на сборку мусора поколений.
Коллектор поколений должен уметь определять, когда более старые объекты указывают на более новые объекты. Мы не можем проследить через более старый объект, чтобы найти эти случаи, потому что это противоречило бы цели сбора поколений. Вместо этого нам нужно как-то определить, когда это происходит, и записать это на этапе сбора. Независимо от того, как вы собираетесь это сделать, это добавит некоторые издержки к процессу сбора.
В настольной системе ваша операционная система делает все возможное с памятью за кулисами. Он поддерживает такие функции, как обмен страницами между процессами, запись неиспользуемых страниц на диск, обеспечение отображения памяти между процессами и т. Д. Насколько я понимаю, некоторые из используемых там функций позволяют более эффективно отслеживать изменение указателей. Операция уже беспокоится о том, что вы изменяете в памяти, поэтому использование этой информации для новых целей не является проблемой.
Я подозреваю, что мобильные системы не делают все то же самое за кулисами. В результате они не имеют такой же уровень информации, как у настольных компьютеров. Как следствие, накладные расходы, связанные с реализацией общей коллекции, выше и с меньшей вероятностью будут стоить этого.
источник