Этот вопрос заочно решён многими «диванными экспертами» на основе простой логики. Если Apple iPhone справляется со своими задачами, не нуждаясь в большом количестве RAM, значит ребята из Купертино разобрались с вопросом памяти гораздо эффективнее, чем это сделали инженеры и программисты на Android. И вроде бы и не возразишь. Но, как это всегда и бывает, есть определенные нюансы, которые проливают свет на сложившуюся картину с несколько другой стороны.
Немного истории
Когда противостояние 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.
А что 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.
К-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.
Как видно из таблицы, iOS приложения в среднем «едят» на 40% меньше RAM по сравнению с Android. Иными словами, чтобы не страдали дизайн или эффективность приложения, iPhone необходимо иметь на борту 6GB, а Android смартфону — все 8GB.
Но посмотрите на таблицу с игрушками
Как видите, результат отличается от ситуации с приложениями. И все потому, что игрушки очень часто являются нативными для Android. А это значит, что они не нуждаются в использовании JVM. Например, такие популярные игровые инструменты, как Unity или Unreal прекрасно обходятся без ее услуг.
Таким образом, игровые приложения показывают, что разница в использовании RAM между iOS и Android в данном случае составляет всего 10%. И хотя это все еще значительное число, эксперты отмечают, что его вполне можно объяснить, сравнивая версии компиляторов, разрешения экранов, сжатие текстур и так далее. Получается, что для геймеров объем оперативной памяти, необходимый для iOS и Android, примерно одинаков.