Найти в Дзене
The Geek Wolf

Apple vs Android RAM менеджмент: кто справляется лучше?

Оглавление

Этот вопрос заочно решён многими «диванными экспертами» на основе простой логики. Если Apple iPhone справляется со своими задачами, не нуждаясь в большом количестве RAM, значит ребята из Купертино разобрались с вопросом памяти гораздо эффективнее, чем это сделали инженеры и программисты на Android. И вроде бы и не возразишь. Но, как это всегда и бывает, есть определенные нюансы, которые проливают свет на сложившуюся картину с несколько другой стороны.

androidauthority.com
androidauthority.com

Немного истории

Когда противостояние Android и iOS только начиналось, особой разницы в подходе к распределению RAM не было. HTC Dream 2008 года имел на борту всего 192MB RAM, а первый iPhone был укомплектован аж 128MB. iPhone 3G застрял на прежней цифре, но iPhone 3GS в 2009 уже добрался до 256MB. Количество памяти было удвоено для iPhone 4, затем снова увеличено в два раза для iPhone 5 (2012). «Яблочные» смарты оставались с 1GB RAM до 2015 года, когда был выпущен iPhone 6S, который получил уже 2GB RAM. Сегодня самый современный iPhone 13  имеет на борту рекордные 6GB RAM.

androidauthority.com
androidauthority.com

А что Android?

Samsung Galaxy S в далёком 2010 году получил 512MB RAM, а его модификация S2 уже имела аж 1GB. Следующий смарт серии S 2012 предлагал варианты с 2GB, S4 в 2013 году получил такое количество RAM по дефолту. И тут наступил момент, когда подходы к менеджменту памяти на Android OS и iOS принципиально разошлись. Как мы видим, Samsung «воткнул» 2GB в S4 за пару лет до того, как Apple «выдала» 2GB новому флагману iPhone 6S. Ну и сегодня уже никого не удивляет, что у Samsung Galaxy S22 Ultra 12GB RAM.

Все это очень хорошо, но вопрос тем не менее остаётся прежним:
Если iPhone справляется со своими задачами с меньшим количеством RAM, значит он просто лучше оптимизирован?

Логика понятна, но не все так просто. Здесь не столько в оптимизации дело, сколько в решении разработчиков на Android использовать Java.

androidauthority.com
androidauthority.com

К-C/Swift vs Java/Kotlin

Разработчик под iOS пишет свое приложение на том языке, который «понимает» процессор iPhone. Это так называемый «нативный код», который не нуждается в дополнительной среде или средствах интерпретации. Иными словами, процессор iPhone не нуждается в переводчике.

На Android все по-другому. Когда код Java компилируется, он превращается в промежуточный код (байт-код Java), который не зависит от процессора.  Один и тот же байт-код Java может работать на процессоре Arm, процессоре x86 или процессоре RISC-V.  Не случайно девиз Java звучит так: «Напиши один раз, работай везде». Такой  подход имеет огромные преимущества для кросс-платформенной совместимости. Но, как вы, вероятно, уже догадались, такая универсальность не может быть бесплатной.

Каждая операционная система и процессор нуждаются в среде выполнения, известной как виртуальная машина Java (JVM), которая работает тем самым «переводчиком», которого нет у iOS. JVM понимает байт-код Java и преобразовывает («переводит») его в собственный код процессора.  Первоначально это делалось путем интерпретации, то есть код считывался и преобразовывался постепенно, по кускам.  Со временем были изобретены различные методы для ускорения процесса, среди которых своей эффективностью выделяется кэширование ранее преобразованных фрагментов и опережающая компиляция.

Но несмотря на все старания, две главных проблемы Android так не были решены.

  • процессор быстрее работает с нативным кодом, чем через «перевод» JVM.
  • использование виртуальной машины увеличивает количество RAM, необходимое для безошибочной работы практически любого приложения в среде Android.
androidauthority.com
androidauthority.com

Как видно из таблицы, iOS приложения в среднем «едят» на 40% меньше RAM по сравнению с Android. Иными словами, чтобы не страдали дизайн или эффективность приложения, iPhone необходимо иметь на борту 6GB, а Android смартфону — все 8GB.

Но посмотрите на таблицу с игрушками

androidauthority.com
androidauthority.com

Как видите, результат отличается от ситуации с приложениями. И все потому, что игрушки очень часто являются нативными для Android. А это значит, что они не нуждаются в использовании JVM. Например, такие популярные игровые инструменты, как Unity или Unreal прекрасно обходятся без ее услуг.

Таким образом, игровые приложения показывают, что разница в использовании RAM между iOS и Android в данном случае составляет всего 10%. И хотя это все еще значительное число, эксперты отмечают, что его вполне можно объяснить, сравнивая версии компиляторов, разрешения экранов, сжатие текстур и так далее. Получается, что для геймеров объем оперативной памяти, необходимый для iOS и Android, примерно одинаков.