2013-12-20 3 views
0

Я делаю некоторые приложения (серверы и клиенты). У меня есть точка, где мне нужно вызвать System.gc();Java и вызов сборщика мусора

Но я нашел здесь Why is it bad practice to call System.gc()?, который не рекомендуется вызывать gc.

Если я использую System.gc() программы работает на ~ 80MB памяти, но без дс, память вырастает до ~ 600-700MB и мне нужно, чтобы запустить его на Android телефонов

Существуют ли другие методы очистить память?

Благодаря

EDIT: Видя комментарии, в Android, как я испытал (портированы 1 час назад), с System.gc() работает хорошо, я не проверял без него

EDIT 2 : Вот две фотографии программ, работающих в рабочем столе через 5 минут:

с System.gc(): http://imgur.com/M9yMBei Без System.gc(): http://i.imgur.com/4qb2Ylc.png

EDIT 3: WOW !! 1, прежде чем опубликовать это приложение использует около 2 ГБ оперативной памяти!

+1

600 МБ кучи? – Blackbelt

+0

GC будет возвращать объекты * когда * он может (и * когда * он думает, что это необходимо) - для таких систем, как Android, трюк заключается в разработке приложения, которое не так много нужно загружать за раз. Вот почему представления имеют автономные жизненные времена в Android и т. Д.: Дизайн позволяет * ограничить * рабочий след. – user2864740

+0

Чтобы уточнить: без вызова 'System.gc()' память растет до 600, 700 МБ * при запуске на мобильном устройстве *? Или вы делаете эти тесты на настольной машине с настольным JRE? – delnan

ответ

2

Это плохая практика, потому что обычно среда выполнения знает больше о состоянии системы, чем вы. Если оперативная память доступна, почему бы не использовать ее? Если ОЗУ недоступно, система будет GC в любом случае.

В любом случае, вызов System.gc() - это всего лишь подсказка, и я подозреваю, что это будет означать, что с течением времени будет более вероятно игнорироваться.

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