Site icon AppTractor

Руководство по потреблению памяти Android Studio

Android Studio — мощная IDE, но она может быть требовательна к памяти. Несколько твиков могут значительно повысить производительность и уменьшить чрезмерное использование памяти. В этой статье я дам советов и более подробно расскажу о том, как работает каждая оптимизация и как ее применять.

1. Включите индикатор памяти и настройте размер кучи IDE

Что и зачем

Android Studio работает на виртуальной машине Java (JVM) с максимальным размером кучи (лимит памяти). По умолчанию он составляет около 1280 МБ для IDE. Если куча слишком мала, IDE будет часто собирать мусор (освобождать память), чтобы не превысить лимит, что приведет к замедлению работы. Если куча слишком большая, IDE может потреблять больше оперативной памяти, чем нужно, что может привести к длительным паузам в сборке мусора. На системе с 16 Гб памяти у вас есть возможность увеличить кучу для повышения производительности. Более того, Android Studio даже предупредит вас о нехватке памяти (менее 5% свободной кучи) и предложит увеличить размер кучи. Некоторые разработчики сообщают, что увеличение кучи памяти IDE до 4 или даже 8 ГБ значительно улучшает отзывчивость на больших проектах — хотя вам, скорее всего, не понадобятся полные 8 ГБ, если только ваш проект не огромен.

Как настроить размер кучи

Android Studio предоставляет для этого диалог Memory Settings:

  1. Перейдите в Help > Edit Custom VM Options (или Help > Change Memory Settings в новых версиях). Откроется файл studio.vmoptions (или диалог в новых версиях).
  2. Увеличьте значение -Xmx (максимальный размер кучи). Например, установите значение 4096m для ~4 ГБ. Сохраните и перезапустите Android Studio, чтобы изменения вступили в силу.
    • Альтернативный вариант: В меню Android Studio Settings (Preferences на macOS) > Appearance & Behavior > System Settings > Memory Settings вы можете просто ввести новый размер кучи IDE и применить.
  3.  Включите индикатор памяти (если он еще не включен), чтобы следить за ее использованием. Перейдите в Settings > Appearance и установите флажок «Show memory indicator». Это добавит небольшую полоску использования памяти в нижнюю строку состояния.

Видя индикатор памяти, вы можете видеть, какая часть кучи используется. Маленький трюк: нажатие на строку памяти запускает сборку мусора и освобождает неиспользуемую память на лету. Это удобно, если вы заметили, что объем используемой памяти увеличивается после длительных сеансов программирования — один клик может вернуть часть оперативной памяти без перезапуска IDE.

Почему это помогает

Увеличение кучи дает Android Studio больше пространства для кэширования индексов, данных проекта и анализа кода, что уменьшает замедление работы из-за частой сборки мусора. Однако не стоит устанавливать слишком высокий показатель без причины — гигантская куча не ускорит работу и может сделать паузы в сборке мусора более длительными. Как правило, на машине с 16 Гб памяти старайтесь использовать 2-4 Гб кучи. Если IDE все еще выдает предупреждения «Low Memory» или не справляется с очень большими проектами, то подумайте о том, чтобы постепенно увеличивать этот показатель. В противном случае умеренная куча позволит сэкономить оставшуюся оперативную память для эмулятора, Gradle и других процессов.

Официальная ссылка: В руководстве Android Developers по настройкам памяти отмечается, что если у вас >5 ГБ ОЗУ, увеличение кучи IDE может повысить производительность.

2. Оптимизируйте настройку демона Gradle для сборок

Что и зачем

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

На системе с 16 ГБ ОЗУ вы можете спокойно держать демона Gradle включенным (в последних версиях Gradle он включен по умолчанию). Демон будет потреблять некоторое количество памяти даже в режиме ожидания, но преимущество заключается в том, что когда вы нажимаете кнопку «Run» или «Build», процесс происходит гораздо быстрее, чем если бы вы каждый раз начинали его с нуля. Команда Gradle отмечает, что демон обеспечивает кэширование и JIT-оптимизацию, которые значительно сокращают время сборки.

Как включить/настроить

Убедитесь, что демон включен (обычно это так). Вы можете явно включить его в настройках Gradle:

Также рассмотрите возможность настройки памяти JVM демона, если у вас очень большие проекты. По умолчанию максимальная куча демона Gradle составляет около 512 МБ. При сложных сборках (много модулей или обработка аннотаций) может быть полезно предоставить ему больше памяти (например, 1-2 ГБ), чтобы он не стал узким местом. Для этого установите свойство org.gradle.jvmargs. Например:

# Inside gradle.properties
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8

Вышеуказанное позволит процессу сборки Gradle получить до 2 ГБ оперативной памяти. В документации Gradle упоминается, что по умолчанию используется 512 МБ кучи и ~384 МБ Metaspace, поэтому увеличение этого параметра может помочь большим сборкам (только убедитесь, что вы оставили достаточно оперативной памяти для Android Studio и системы).

Почему это помогает

Включив демона и увеличив его размер, вы избежите накладных расходов на запуск нового Java-процесса для каждой сборки и позволите Gradle кэшировать данные между запусками. Это огромная экономия времени — сам Gradle утверждает, что демон может сохранять информацию о сборке в памяти и получать преимущества от оптимизаций JVM с течением времени. Компромиссом является постоянное присутствие в памяти. На машине с 16 ГБ демон, использующий, скажем, 1 ГБ, обычно справляется. Если вы запускаете много приложений или ваша память почти заполнена, учтите, что демон все равно будет работать в течение нескольких часов (вы можете настроить org.gradle.daemon.idletimeout, чтобы отключить его раньше, если это необходимо).

Официальная ссылка: В документации Gradle по демону подчеркивается, как он ускоряет сборку за счет кэширования и сохранения резидентности.

3. Включите параллельные сборки проектов

Что и зачем

По умолчанию Gradle выполняет задачи последовательно (по одной за раз), даже если ваш проект состоит из нескольких независимых модулей. Включение параллельных сборок позволяет Gradle компилировать модули параллельно, используя несколько ядер процессора. Это может значительно сократить время сборки для многомодульных проектов. По сути, если модуль A и модуль B не зависят друг от друга, почему бы не собрать их одновременно? На системе с 16 ГБ ОЗУ и современным многоядерным процессором вы обычно можете справиться с параллельной компиляцией модулей — за счет одновременного использования большего количества процессора и памяти во время сборки.

Как включить

После включения этой опции Gradle будет выполнять параллельные задачи для независимых модулей. В официальном руководстве Gradle отмечается, что большинство многомодульных проектов будут быстрее собираться с включенной опцией. Улучшение зависит от структуры вашего проекта (проекты с большим количеством изолированных модулей получают больше преимуществ, чем одномодульные приложения). В качестве примера в документации Gradle приводится случай, когда перестановка задач для параллельного выполнения сократила продолжительность сборки с 8 до 5 секунд — примерно 37% улучшения только за счет распараллеливания задач. Многие Android-разработчики сообщают о 20-30% ускорении сборки больших приложений после включения параллельных сборок (ваш пробег может отличаться, но в целом он положительный).

Влияние на память

При параллельной сборке Gradle запускает больше процессов/потоков компиляции одновременно. Это означает увеличение использования памяти во время сборки. Компиляция каждого модуля может использовать несколько сотен мегабайт оперативной памяти, поэтому если вы компилируете, скажем, 4 модуля одновременно, убедитесь, что у вас есть несколько гигабайт свободной памяти. На машине с 16 Гб оперативной памяти это обычно нормально, но если вы заметили, что во время сборки ваша система подкачивает данные с диска, это может означать, что параллельная сборка израсходовала оперативную память. В таких случаях вы можете ограничить количество воркеров, используемых Gradle. По умолчанию Gradle будет использовать количество процессов, равное количеству ядер вашего процессора. Вы можете ограничить это число, добавив org.gradle.workers.max=<N> в gradle.properties, чтобы использовать не более N рабочих потоков. Например, можно установить org.gradle.workers.max=4, если вы хотите немного ограничить параллелизм для экономии памяти. Такая тонкая настройка не всегда необходима, но ее полезно знать, если вы столкнетесь с ограничениями по памяти.

В целом, на системе с 16 ГБ параллельные сборки — это достойный компромисс: вы, вероятно, заметно сократите время сборки, используя больше оперативной памяти на короткое время. Чем быстрее завершается сборка, тем быстрее освобождается память.

Официальная ссылка: Руководство по производительности Gradle при параллельном выполнении отмечает, что большинство мультипроектных сборок сокращают время.

4. Используйте автономный режим Gradle и кэш сборки

Что и зачем

Эти настройки не уменьшают потребление памяти напрямую, но они ускоряют процессы сборки и избавляют от лишней работы, что косвенно означает, что Android Studio тратит меньше времени на выполнение тяжелых задач. На 16-гигабайтной машине более быстрые сборки и меньшее количество фоновой активности помогут IDE работать быстрее и быстрее освобождать память.

Как включить автономный режим

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

Как включить кэш сборки

Почему это помогает

В автономном режиме Gradle не нужно проверять интернет, что ускоряет настройку сборки. Это больше относится ко времени, чем к памяти — но более быстрые сборки означают, что тяжелые процессы Gradle завершаются быстрее, освобождая память и процессор для других задач. Кэш сборки может значительно сократить количество повторных операций, что означает, что во время длительных сессий кодирования вы не перекомпилируете неизменные модули снова и снова. Это снижает совокупное использование процессора и памяти при нескольких запусках. В документации Google по Android и документации Gradle подчеркивается, что использование кэша сборок позволяет значительно ускорить сборку при последующих запусках. Это легкая победа для производительности.

Официальная ссылка: Документация по Gradle описывает автономный режим и кэширование для ускорения сборок.

5. Управляйте использованием памяти эмулятора Android (или используйте физическое устройство)

Если вы используете эмулятор Android вместе с Android Studio, он может быть большим потребителем памяти. Эмулятор — это, по сути, виртуальная машина под управлением Android, а значит, он может легко использовать 1-2 ГБ оперативной памяти (или больше) для виртуального устройства. На 16-гигабайтной системе запуск IDE и одного или нескольких эмуляторов может довести память до предела. Вот как это можно оптимизировать/

Используйте физическое устройство, когда это возможно

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

Настройте параметры памяти AVD

Если эмулятор вам все-таки нужен, вы можете настроить объем оперативной памяти, выделенный для него. По умолчанию AVD (виртуальное устройство Android) может выделять определенный объем памяти (например, 1536 МБ). Вы можете уменьшить это значение, если ваше приложение не требует полного объема. Для этого откройте AVD Manager (Android Studio > Tools > AVD Manager), нажмите на значок Edit (карандаш) для вашего виртуального устройства, затем нажмите Show Advanced Settings. В окне дополнительных настроек найдите раздел Memory and Storage и найдите RAM. Вы можете уменьшить значение RAM (в пределах разумного) и сохранить AVD. Например, вы можете изменить его с 2048 МБ до 1024 МБ. Имейте в виду, что при слишком низком значении эмулятор может начать свапить данные, а ваше виртуальное устройство будет работать медленно или даже упадет, если Android не будет иметь достаточно оперативной памяти. Кроме того, некоторые образы системы (например, AVD с поддержкой Google Play) имеют минимальные требования к оперативной памяти и могут не позволить резко сократить ее объем.

Отключите ненужные функции эмулятора

В эмуляторе есть такие функции, как Quick Boot снепшоты, которые используют часть диска и памяти для сохранения состояния. Если у вас низкая производительность, отключите Quick Boot (чтобы эмулятор всегда загружался в холодном режиме) — иногда это может стабилизировать использование памяти за счет более длительного запуска каждый раз. В настройках эмулятора вы можете отключить моментальные снимки (Quick Boot), если это необходимо. Это, вероятно, решит некоторые проблемы с нестабильностью, но в отношении влияния на память все может быть по-разному.

Не запускайте больше эмуляторов, чем нужно

Каждый запущенный AVD — это как еще одно отдельное устройство. Старайтесь закрывать экземпляры эмуляторов, когда вы их активно не используете. Если вам нужно протестировать несколько версий Android, лучше запускать/останавливать один эмулятор за раз, а не держать 2-3 одновременно запущенными на 16-гигабайтной машине.

Системные соображения

Помните, что помимо Android Studio и эмулятора, ваша ОС и другие приложения (браузер и т. д.) также потребляют память. Чтобы освободить оперативную память, рекомендуется закрывать тяжелые приложения (например, другие IDE, большие файлы Photoshop, множество вкладок браузера) во время работы с Android Studio + эмулятором. Некоторые разработчики сообщают, что с 16 ГБ ОЗУ они могут плавно запускать Android Studio, эмулятор, несколько окон браузера и другие приложения вместе, но если зайти так далеко, то эмулятор или IDE, скорее всего, начнут тормозить. Поэтому управляйте своим рабочим пространством: если вы заметили заторможенность, попробуйте закрыть неиспользуемые программы или провести тест устройства вместо запуска в эмуляторе.

Инсайт: Эмулятор Android — это, по сути, виртуальная машина, поэтому он рассматривает ваш 16-гигабайтный ПК как хост, на котором запущена другая ОС. Все, что вы можете сделать, чтобы облегчить нагрузку на эту виртуальную машину (например, уменьшить объем ее оперативной памяти или использовать реальное устройство), освободит память для вашей основной системы.

6. Отключите неиспользуемые плагины и функции в Android Studio

Android Studio (основанная на IntelliJ IDEA) имеет богатую экосистему плагинов и множество функций, включенных по умолчанию. Каждый плагин или функция анализа потребляют память и время процессора. Если ваша IDE выполняет ненужную вам работу, лучше отключить ее, чтобы сэкономить ресурсы.

Отключите ненужные плагины

Проверьте установленные в Android Studio плагины и отключите те, которые вы не используете. Например, если вы никогда не занимаетесь Flutter или разработкой на C++ в этом проекте, вы можете отключить эти плагины. Меньшее количество активных плагинов означает меньшую фоновую активность и меньшее потребление памяти. Для этого перейдите в меню File > Settings > Plugins и просмотрите список. Такие плагины, как Firebase, TensorFlow и т. д., которые, возможно, не нужны для вашего текущего приложения, можно отсключить. Компания JetBrains (производитель IntelliJ) специально рекомендует отключать неиспользуемые плагины для повышения производительности, поскольку некоторые плагины могут перехватывать действия IDE или запускать фоновые задачи, о которых пользователь может не знать.

Используйте режим энергосбережения (когда это необходимо)

В Android Studio есть «Режим энергосбережения» (Power Save Mode, находится в меню File), который отключает фоновый анализ и проверку кода. При включении этого режима IDE прекращает такие действия, как линтинг кода в реальном времени, инспекции и некоторые виды индексации. Это может значительно сократить использование процессора и памяти IDE за счет этих полезных функций редактора. Если вы просто пишете код и можете какое-то время обойтись без автоинспекции, включение режима энергосбережения может облегчить работу с IDE (только не забудьте отключить его, когда вам понадобится вся мощь IDE для отладки или анализа кода). По сути, режим энергосбережения — это как указание Android Studio «делать меньше в фоновом режиме», что может быть полезно при ограниченном бюджете памяти.

Исключите большие папки из индексации

Android Studio индексирует файлы ваших проектов для таких функций, как поиск и завершение кода. Если у вас есть большие папки, которые не нужно индексировать (например, огромные логи, сгенерированные файлы сборки или бинарные ассеты), вы можете исключить их. Щелкните правой кнопкой мыши папку на панели проекта > Mark Directory as > Excluded. Таким образом, IDE не будет сканировать или загружать эти файлы в память для поиска. В документации JetBrains предлагается исключить такие папки, как build outputs, logs и т. д., чтобы уменьшить объем работы, которую приходится выполнять IDE. Аналогично, если у вас есть несколько модулей и некоторые из них не используются активно, вы можете воспользоваться функцией Unload Modules (доступна через контекстное меню в структуре проекта в новых версиях Android Studio), чтобы полностью выгрузить модуль из IDE, пока он вам снова не понадобится. При этом освобождается память, которая была бы использована для индексации и поддержки модуля.

Почему это помогает

Каждый плагин или активная функция занимают определенное количество памяти (например, плагин инструментария AWS может загружать библиотеки, а плагин Kotlin, выполняющий проверки, хранит в памяти данные анализа). Удалив те из них, которые не используются, вы уменьшите занимаемую IDE память. Отключение проверок «на лету» (через Power Save) или предложений по автоимпорту также может остановить IDE от постоянного использования CPU/RAM для этих задач. Компания JetBrains рассказала, что в некоторых случаях работа плагинов мешала производительности редактора — пользователь мог заметить это, только протестировав разработку с отключенными плагинами. Таким образом, более чистая и компактная конфигурация IDE обычно работает быстрее и эффективнее.

Будучи начинающим разработчиком, вы можете не знать, какие плагины необходимы. Хорошее правило: если вы не узнали или не используете эту технологию, то, скорее всего, можете ее отключить (позже вы всегда сможете включить ее снова). Ядро Android Studio будет продолжать работать нормально. Сосредоточьтесь на тех инструментах, которые нужны для вашего проекта, и не стесняйтесь отключать остальные.

Заключение

Применив эти оптимизации, вы сможете сделать Android Studio гораздо более управляемой. Мы увеличили память IDE и Gradle до соответствующих уровней (чтобы у них было достаточно места для эффективной работы), включили такие функции сборки, как демон, параллельные сборки, автономный режим и кэширование, чтобы ускорить работу, и сократили ненужное использование ресурсов эмулятора и плагинов. Каждая настройка позволяет найти баланс между производительностью и потреблением памяти: например, большая куча ускоряет работу IDE, но использует больше оперативной памяти, а параллельные сборки используют больше памяти во время сборки, но завершаются быстрее. Мы также привели ссылки на официальную документацию и реальные примеры, подтверждающие эти рекомендации, так что вы можете быть уверены, что это проверенные методы.

Настраивая свое окружение, следите за индикатором памяти и системным монитором. Цель — не минимизировать использование оперативной памяти любой ценой, а оптимизировать ее: используйте свои 16 ГБ с умом, чтобы получить более быстрые сборки и более плавную работу IDE, не перегружая систему. Выполнив описанные выше действия, многие разработчики обнаруживают, что Android Studio комфортно работает в пределах 16 ГБ, а время сборки значительно сокращается (некоторые отмечают 20-50% улучшение скорости сборки за счет параллельного выполнения и кэширования).

Наконец, помните, что каждый проект и система немного отличаются друг от друга. Не бойтесь экспериментировать с этими настройками. Если что-то не поможет, вы можете это изменить. Android Studio даже дает подсказки по оптимизации памяти (например, рекомендации по размеру кучи) — обращайте внимание на эти уведомления. Понимая, почему эти настройки работают, вы сможете адаптировать IDE под свои нужды и обеспечить бесперебойную разработку. Счастливого кодинга!

Источник

Exit mobile version