Какова основная причина превышения верхнего предела gc превысила ошибку в android? [дубликат]

Видео: Как освободить память на Андроиде

«Память телефона заполнена» — безусловно, одна из самых неприятных и назойливых надписей для владельцев устройств на Android. Надеемся, благодаря нашим советам она вас ещё долго не побеспокоит.

Возникновение ошибки «На компьютере недостаточно памяти» обусловлено нехваткой оперативной, а также виртуальной памяти. В этой связи, наиболее вероятные причины, которые могут вызвать эту ситуацию, следующие:

  • Имеется реальная нехватка физической RAM;
  • На компьютере в данный момент запущено очень много процессов (это могут быть как программы, так и сессии внутри работающих приложений, например, вкладки браузера);
  • Жесткий диск практически полностью занят – в этом случае не получится нормально работать файлу подкачки;
  • Имеются также программы, которые могут вызвать так называемую «утечку памяти» — ситуацию, когда приложение для выполнения своих задач занимает все доступное пространство.

Именно по этим причинам операционная система выдает ошибку «Недостаточно памяти на компьютере,чтобы освободить память закройте программы».

Собственно, решение данной проблемы зависит от первопричины.

В случае физической нехватки оперативной памяти разумеется потребуется увеличить ее объем, приобретя планки RAM в магазине. В большинстве компьютеров сейчас используется 8 Гб, однако здесь все зависит от задач, для которых компьютер был куплен

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

Прелесть ее в том, что она не позволит удалить файлы, которые используются системой и привести к ее неработоспособности. Другими словами, очистка диска утилитой Windows поможет безопасно удалить временные и ряд других, в большинстве случаев бесполезных, файлов. Запустить ее можно, нажав правой кнопкой мыши на диск C: и выбрав «Свойства» и затем «Очистка диска»

Если причина в том, что жесткий диск полностью занят и на компьютере недостаточно памяти, то чтобы ее освободить потребуется утилита очистки диска. Прелесть ее в том, что она не позволит удалить файлы, которые используются системой и привести к ее неработоспособности. Другими словами, очистка диска утилитой Windows поможет безопасно удалить временные и ряд других, в большинстве случаев бесполезных, файлов. Запустить ее можно, нажав правой кнопкой мыши на диск C: и выбрав «Свойства» и затем «Очистка диска».

Утилита проведет первичный анализ и покажет, какие файлы можно удалить. Как правило, в данном случае это будет не очень большой объем. Нажав на «Очистить системные файлы» пройдет еще один этап анализа и объем освобождаемого пространства наверняка будет увеличен.

Также следует проверить, включен ли файл подкачки. Он используется в том случае, если для работы программ недостаточно памяти и требуется больше, чем в данный момент имеется физически – в этом случае нехватка будет компенсирована за счет свободного места на жестком диске. Необходимо открыть «Панель управления», далее «Система».

После открываем «Дополнительные параметры системы».

Переключаемся на вкладку «Дополнительно».

Щелкаем «Изменить».

В данном окне можно управлять размером файла подкачки. Рекомендуется установить его размер автоматически.

В том случае, если памяти недостаточно из-за другой программы или множества процессов, то логично будет понять, какие это из них. В этом случае можно использовать Диспетчер задач, отсортировав процессы по столбцу «Память» на вкладке «Подробности».

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

Отличного Вам дня!

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

G1 (Мусор — первым) GC

G1GC был задуман как замена CMS и разрабатывался для многопоточных приложений, которые характеризуются крупным размером кучи (более 4 ГБ). Он параллелен и конкурентен, как CMS, но “под капотом” работает совершенно иначе, чем старые сборщики мусора.

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

G1 разбивает кучу на набор областей одинакового размера (от 1 МБ до 32 МБ — в зависимости от размера кучи) и сканирует их в несколько потоков. Область во время выполнения программы может неоднократно становиться как старой, так и молодой.

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

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

Поскольку G1 GC идентифицирует регионы с наибольшим количеством мусора и сначала выполняет сбор мусора в них, он и называется: “Мусор — первым”.

Помимо областей Эдема, Выживших и Старой памяти, в G1GC присутствуют еще два типа.

  • Humongous (Огромная) — для объектов большого размера (более 50% размера кучи).
  • Available (Доступная) — неиспользуемое или не выделенное пространство.

Аргумент JVM для использования сборщика мусора G1: .

Параллельный GC

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

Несколько потоков предназначаются для малой сборки мусора в молодом поколении. Единственный поток занят основной сборкой мусора в старшем поколении.

Запуск параллельного GC также вызывает “остановку мира”, и приложение зависает. Такое больше подходит для многопоточной среды, когда требуется завершить много задач и допустимы длительные паузы, например при выполнении пакетного задания.

Аргумент JVM для использования параллельного сборщика мусора: .

1 ответ

3

Лучший ответ

Я называю это «загрузкой мира» — имя (без аргументов) — это немного запаха кода — поскольку вы не ограничиваете размер набора результатов, и для всех, кого мы знаем, объекты могут быть большими с множество загруженных зависимостей (не говоря уже обо всех поддерживающих Hibernate объектах в куче).

Еще одна большая проблема заключается в том, что вы дорого добавляете свои обезвоженные объекты в , вызывая и потенциально , только чтобы выбросить ключи и скопировать значения в недавно выделенный .

Оставляя в стороне отсутствие предварительной калибровки (правильно, это не идеально, хотя оно должно быть просто медленным), почему стадия ? Если вам требуется агрегация, почему бы не заставить базу данных делать это намного эффективнее (например, с помощью имени ) и используя индекс, вместо того, чтобы вытащить все это на карту для более медленной повторной обработки? По крайней мере, получив только уникальный back, вы можете пропустить этап карты и скопировать прямо в свой список (в зависимости от ваших потребностей есть еще и более легкие возможности).

Я настоятельно рекомендую тестирование с помощью надлежащего Profiler. В частности, это может помочь вам определить эффект высокой загрузки по размеру кучи. Потенциально просто отключение этого может сделать проблему намного более управляемой.

Тем не менее, вам также необходимо рассмотреть ваши клиенты кода: кому действительно нужны все эти ? Скорее всего, никто.

24 фев. 2016, в 21:16
Поделиться

Ещё вопросы

  • MySQL запрос, содержащий IF или CASE для выбора неактивных пользователей
  • 2Как получить входящие смс в твилио с помощью веб-форм c #?
  • 1Codeigniter: Как можно удалить любое сообщение об ошибке для пользователя
  • nexAll () / prevAll () и условие с hasClass ()
  • 2Загрузка файла API с использованием содержимого HTTP, не показанного в сваггере
  • 1ValueError: массив слишком большой — не могу понять, как это исправить
  • CSS: создать 2 группы из двух входных текстов
  • Тот же код для определения ключа DEL в textarea не работает на моем компьютере?
  • 1В Python3 `импорт` работает транзитивно?
  • 1Имена файлов искажаются после загрузки с помощью php move_uploaded_file ()
  • 1Как скрыть окно консоли Chromedriver?
  • 1как получить список методов из файла .java
  • 1не заходишь в Онкейлистенер? Не в состоянии разобраться
  • Не могу получить количество строк из этого файла
  • 2Создайте ActiveX.exe, используя .Net 4 и VS2010
  • 1Javascript: добавить, а затем удалить класс после определенной точки при прокрутке
  • 1Android, сервисы и потоки. Почему поток не запускается, пока не закончится другое выполнение?
  • 1Как повторно использовать DatagramSocket?
  • 1Android. AndEngine. Артефакты изображения, где используется прозрачность
  • 1Кукловод — используя ожидание внутри цикла
  • 1Symfony отображает значение объекта в ветке
  • 2Попытка создать материал из строки — это больше не поддерживается
  • Я хочу нажать пустую запись в $ scope.planlist = [], но показывает идентичное поведение
  • выбрать из производной таблицы с псевдонимом, дающим неправильный ответ
  • 1Vanilla JS, не может заменить обратную косую черту в строке, извлеченной из DOM
  • 1Получить строку между первым и третьим появлением символа
  • Как динамически рассчитать, сколько элементов отображать на каждой странице
  • 2Ошибка в методе «SaveChanges ()»
  • Отфильтровать проблему в Angular
  • 1Скользящая корреляция с Groupby в Пандах
  • 2Google directions api web service — показать ответ на карте. Является ли это возможным?
  • Опрос на изменения базы данных: SqlDependency, SignalR это хорошо
  • JQuery UI Slider, вывод нескольких значений
  • swprintf неожиданные результаты
  • 1Проверка Event.target происходит слишком быстро
  • Отправить информацию из последней вставки в базе данных в файл php
  • Слишком много категорий, определенных в ATL Trace
  • 1несколько целей сборки для проекта Android в Eclipse
  • 1Как я могу получить путь предыдущего URL?
  • Как использовать функции из другого контроллера
  • 1JavaScript: функции свойств подняты?
  • отправьте сообщение, нажав кнопку «не отправлять»
  • угловая печать печать второй пустой страницы
  • 1показать прогресс загрузки для JSON
  • 1Как добавить файлы с открытым исходным кодом в Eclipse, чтобы Ctrl + Shift + R отображал файлы исходного кода?
  • 1Не удается выполнить TCP-рукопожатие через NAT между двумя сетевыми картами с SO_BINDTODEVICE
  • C ++ — использование двумерного массива, размерность которого составляет
  • Как предотвратить появление всплывающих окон в Facebook, если нажать кнопку «Закрыть»
  • Создание транзитивного набора пар с использованием STL C ++
  • 1Замедлить скорость загрузки фоновых заданий?

Сборщик мусора для рабочей станции

Первая разновидность сборщика мусора, с которой мы познакомимся, называется сборщиком мусора для рабочей станции (workstation GC). Эта разновидность делится на два подвида: параллельный сборщик мусора для рабочей станции (concurrent workstation GC) и непараллельный сборщик мусора для рабочей станции (non-concurrent workstation GC).

Этот сборщик мусора выполняется в единственном потоке — сборка мусора происходит последовательно

Обратите внимание, что есть
разница, когда сам процесс сборки выполняется параллельно на нескольких процессорах, и когда процесс сборки выполняется параллельно с прикладными потоками

Параллельный сборщик мусора для рабочей станции

По умолчанию используется параллельный сборщик мусора для рабочей станции. Этот сборщик выполняется в отдельном потоке с приоритетом thread_priority_highest, и производит сборку мусора от начала и до конца. Кроме того, среда выполнения CLR может позволить выполнять некоторые фазы сборки параллельно с прикладными потоками (параллельно может выполняться большая часть фазы маркировки).

Обратите внимание, что окончательное решение принимается средой выполнения CLR — как будет показано ниже, некоторые фазы выполняются достаточно быстро, чтобы позволить полную приостановку приложения, например, сборка объектов поколения 0. Так или иначе, когда сборщик переходит к фазе чистки, все прикладные потоки приостанавливаются

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

В верхней части показан график работы параллельного сборщика мусора, когда он запускается из потока выполнения, управляющего пользовательским интерфейсом. В нижней части показан график работы параллельного сборщика мусора, когда он запускается одним из фоновых потоков выполнения. (Пунктирные линии соответствуют интервалам простоя потоков выполнения.)

Таким образом, приложения с графическим интерфейсом, использующие параллельный сборщик мусора, должны приложить все усилия, чтобы исключить возможность запуска из потока управления пользовательским интерфейсом. Для этого достаточно обеспечить выделение памяти только в фоновых потоках выполнения и воздерживаться от явного вызова GC.Collect() в потоке пользовательского интерфейса.

Во всех приложениях для .NET (кроме приложений ASP.NET), независимо от того, где они выполняются, на рабочей станции или мощном многопроцессорном сервере, по умолчанию используется параллельный сборщик мусора для рабочих станций. Это умолчание редко соответствует требованиям серверных приложений, как будет показано чуть ниже. Как мы только что видели, это умолчание иногда также не соответствует требованиям приложений с графическим интерфейсом, если они склонны вызывать сборку мусора из потока пользовательского интерфейса.

Непараллельный сборщик мусора для рабочей станции

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

Поток выполнения, управляющий пользовательским интерфейсом, вызывает сборку мусора, которая выполняется непараллельным сборщиком. Другие потоки не конкурируют за ресурсы в ходе сборки мусора.

Z Сборщик мусора

Все еще экспериментальная, очень масштабируемая реализация с низкой задержкой. Если вы хотите поэкспериментировать с этим сборщиком мусора Z, вы должны использовать JDK 11 или новее и добавить флаг -XX:+USEZGC в параметры запуска приложения вместе с флагом -XX:+unlockexperimentalvmoptions , поскольку сборщик мусора Z все еще считается экспериментальным.

Настройка сборщика мусора Z

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

Второй вариант, который вы можете ожидать, – это, конечно, количество потоков, которые будет использовать сборщик мусора Z. В конце концов, это параллельный коллектор, поэтому он может использовать более одного потока. Мы можем установить количество потоков, которые будет использовать сборщик мусора Z, используя флаг -XX:ConcGCThreads . Сам коллектор использует эвристику для выбора правильного количества потоков, которые он должен использовать, но, как обычно, это сильно зависит от приложения, и в некоторых случаях установка этого числа в статическое значение может принести лучшие результаты. Однако это необходимо проверить, так как это очень зависит от конкретного случая использования. Однако есть две вещи, которые следует помнить. Если вы назначите слишком много потоков для сборщика мусора, у вашего приложения может не хватить вычислительной мощности для выполнения своей работы. Установите небольшое количество потоков сборщика мусора, и мусор может быть собран недостаточно быстро

Примите это во внимание при настройке

Мы рассмотрели довольно много вопросов, когда речь заходит о параметрах сборки мусора и о том, как они влияют на сборку мусора. Но не все. В этом есть нечто большее, чем это. Конечно, мы не будем говорить о каждом отдельном параметре, это просто не имеет смысла. Однако есть еще несколько вещей, о которых вам следует знать.

Сброс кучи при исключении нехватки памяти

Одна вещь, которая может быть очень полезна при работе с исключениями из памяти, диагностике их причин и изучении таких проблем, как утечки памяти, – это дампы кучи. Дамп кучи – это в основном файл с содержимым кучи, записанным на диск. Мы можем создавать дампы кучи по требованию, но это требует времени и может заморозить приложение или, в лучшем случае, замедлить его. Но если наше приложение выйдет из строя, мы не сможем захватить дамп кучи – он уже исчез.

Чтобы избежать потери информации, которая может помочь нам в диагностике проблем, мы можем поручить JVM создать дамп кучи, когда произойдет ошибка OutOfMemory. Мы делаем это, включая флаг -XX:+HeapDumpOnOutOfMemoryError . Мы также можем указать, где должны храниться кучи, используя флаг -XX:HeapDumpPath и установив его значение в местоположение, в которое мы хотим записать дамп кучи. Например: -XX: Путь к куче=/tmp/heapdump.hprof .

Имейте в виду, что файл дампа кучи может быть очень большим – размером с размер вашей кучи. Поэтому вам необходимо учитывать это при указании пути, по которому должен быть записан файл. Мы видели ситуации, когда JVM не могла записать файл дампа кучи объемом 64 ГБ в целевую файловую систему.

Для анализа файла существуют инструменты, которые вы можете использовать. Существуют инструменты с открытым исходным кодом, такие как MAT , и проприетарные инструменты, такие как YourKit Java Profiler или JProfiler . Есть также такие услуги, как дешевые hero.io это может помочь вам в анализе, в то время как более старые версии дистрибутива Oracle JDK поставляются с jhat – инструментом анализа кучи Java . Выберите тот, который вам нравится и соответствует вашим потребностям.

Итоги

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

Есть два симптома, когда внутренней памяти на телефоне катастрофически не хватает:

  1. Приложения и Андроид тормозят, 
  2. Телефон выдает сообщение о том, что нужно принять меры и освободить занятое пространство.

Увеличив свободное место в памяти Андроид, вы сэкономите время и перестанете замечать тормоза на телефоне и планшете. На всю “уборку” уйдет от силы 20 минут.

Именно фотографии и видео “съедают” больше всего места на телефоне, за счет их можно быстро освободить место на карте памяти или во встроенном хранилище. Если ваш телефон не поддерживает карту памяти, переместите файлы, к которым вы обращаетесь нечасто, в облако. Лучше всего для этого подходит приложение Photos, или Google Photos. Оно автоматически загружает фотографии на сервис, где они доступны в изначальном качестве через браузер или приложение.

Помимо Google Photos, можно обратить внимание на такие альтернативы как Dropbox, Flickr или Microsoft OneDrive. Даже когда фотографии будут доступны только на сервере, вы легко получите к ним доступ, если у вас работает интернет

И главное, это действительно удобный и быстрый способ освободить пару гигабайт внутренней памяти!

Даже когда фотографии будут доступны только на сервере, вы легко получите к ним доступ, если у вас работает интернет. И главное, это действительно удобный и быстрый способ освободить пару гигабайт внутренней памяти!

1. В телефоне не хватало внутренней памяти, я половину фоток отправила на sd карту, после этого открываю, а они все какие-то мутные. Попробовала перекинуть обратно на внутреннюю память Андроид, но фотки такие же. Как мне вернуть прежние фотки, т.е. чтоб было как раньше подчистую без всяких искажений.

2. У меня не хватало внутренней памяти в телефоне, я захотела очистить ее. Я перебросила данные (фото, музыку) на карту памяти. Теперь файлы не читаются, хотя телефон видит карту. Как можно вернуть хотя бы фото?

3. Телефон Самсунг А5. Не знал, как увеличить внутреннюю память, переместил с помощью ноутбука папки с музыкой и файлами с внутренней памяти на sd карту. После этого при открытии папок все они оказались пустые. Файлы и музыку не видит ни телефон, ни компьютер. Внутренняя память телефона вроде не уменьшилась после этого. Как найти эти файлы?

Ответ. Вероятно, вы скопировали на карту памяти не оригиналы, а эскизы. Оригиналы фотографий могли остаться во внутренней памяти телефона. Если это не произошло, вам поможет программа DiskDigger.

Если в памяти устройства недостаточно места, следует скопировать файлы на компьютер (сделать резервную копию) и только после этого перемещать на карту памяти. Вам будет полезно ознакомиться с инструкцией, как очистить внутреннюю память на Андроиде (см. текст выше).

У меня телефон Sony Xperia, когда захожу в Плей Маркет, хочу скачать какую-нибудь программу, система пишет, что не хватает памяти на Андроиде, хотя флешка 16 гб! Что делать?

Ответ. Скорее всего, ошибка «недостаточно памяти» на Андроид связана с тем, что не хватает внутренней памяти – именно туда с Google Play скачиваются установочные файлы.

  1. Перенесите наиболее объемные файлы со внутренней памяти Андроид на вашу sd карточку.
  2. Удалите ненужные приложения через файловый менеджер или Files Go.
  3. Воспользуйтесь утилитой CCleaner для очистки ненужных файлов в памяти телефона. 

Чистила память телефона, удалила много папок. И теперь не могу через Android смотреть галерею, пишет: «Хранилище не доступно». Как можно вернуть обратно?

Ответ. Вероятно, при очистке вы удалили папку с фотографиями на карте памяти (SDCARD/DCIM/CAMERA). Восстановить файлы оттуда можно с помощью программ CardRecovery или PhotoRec.

254 reads

Нехватка памяти – распространённая проблема для пользователей смартфонов. Её не хватает для установки приложений, скачивания больших файлов, сохранения фото и видео. Очистить память телефона на Андроиде можно несколькими способами. Всё зависит от того, что чистить – ОЗУ или ПЗУ. Попробуем разобраться в видах памяти и способах её очистки.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: