2013-04-16 2 views
1

Устанавливает значение null объекту, достаточно хорошему для сбора мусора, чтобы собирать и очищать память на Java (Android)?Уничтожает с утечками памяти и производительностью?

+1

убедитесь, что нет ссылки на исходный объект, тогда сбор мусора можно сделать, но я не думаю, что он гарантирован. – dchhetri

+0

Установка значения «null» для объекта полностью не связана с его GC. Гораздо более распространенным является то, что объекты получают GC'd только потому, что больше никто не ссылается на них. –

ответ

2

Да. Вот как объекты освобождаются на Java. Как только они освобождаются, они получают право на сбор мусора и собираются позднее.

4

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

0

Коробка мусора маркирует и подметает.

При использовании меток и прокрутки объекты без ссылок не возвращаются немедленно. Вместо этого мусор может накапливаться до тех пор, пока вся доступная память не будет исчерпана. Когда это произойдет, выполнение программы временно приостанавливается, в то время как алгоритм mark-and-sweep собирает весь мусор. Как только все объекты без ссылок будут восстановлены, нормальное выполнение программы может возобновиться.

http://www.brpreiss.com/books/opus5/html/page424.html. Ссылка содержит сведения о том, как работают метки и развертки.

http://chaoticjava.com/posts/how-does-garbage-collection-work/

Technical details of Android Garbage Collector

Если вы установите переменную NULL. переменная будет доступна для сбора мусора. Однако это зависит от виртуальной машины (dalvik), чтобы решить, когда собирать мусор. Это также зависит от размера кучи. Более размер кучи более частый сбор мусора. http://www.youtube.com/watch?v=_CruQY55HOk. Парень в видео дает большое предупреждение об использовании большой кучи, поскольку это приводит к более частому сбору мусора, в результате чего приложение приостанавливается.

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

http://developer.android.com/training/articles/perf-tips.html.

Цитата из указанной ссылки. Когда вы выделяете больше объектов в своем приложении, вы будете вынуждать периодическую сборку мусора, создавая небольшие «икоты» в пользовательском режиме.

Смежные вопросы