Сборщик "мусора" в Android

Я видел много ответов Android, которые предлагают назвать сборщик "мусора" в некоторых ситуациях.

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

Есть ли другие вещи, которые я должен использовать прежде, чем обратиться к сборщику "мусора"?

105
задан Rituraj suman 23 March 2015 в 05:59
поделиться

3 ответа

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

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

116
ответ дан 24 November 2019 в 03:54
поделиться

Нет необходимости вызывать сборщик мусора после OutOfMemoryError .

В документации Javadoc четко указано:

Выбрасывается, когда виртуальная машина Java не может выделить объект, потому что ему не хватает памяти, и сборщик мусора не может сделать больше памяти.

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

2
ответ дан 24 November 2019 в 03:54
поделиться

Если вы получаете OutOfMemoryError, то обычно уже слишком поздно вызывать сборщик мусора...

Вот цитата из статьи Android Developer:

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

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

19
ответ дан 24 November 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: