2015-06-15 1 views
1

Если у меня есть ArrayList с несколькими элементами, и я хочу, чтобы очистить все элементы должны I:ArrayList указывая на новую ссылку он будет вызывать GC

  • направь его на новую ссылку? Это вызовет GC? В Android, вызывающем GC, это не так хорошо.
  • call arraylist.clear(). Вызывает ли я сам вызов GC для освобождения памяти?

Как насчет того, действительно ли аррайалист огромен? Я думаю, что у четкой плохой производительности, когда аррайалист огромен. Так что лучше указать на новую ссылку и просто позволить GC выполнить свою работу?

+0

На самом деле, вызов вызова 'clear()' выполняет итерацию по массиву подстановки и установку каждой записи в «null» (а также сброс атрибута 'size'). Никакого звонка в ГК, никаких причудливых вещей. – Turing85

+0

У вас нет контроля над сбором мусора. Тем не менее, если у вас есть 'ArrayList', который вы устанавливаете' null', * и не существует других ссылок на объекты, содержащиеся в списке до обнуления *, то эти объекты становятся * приемлемыми * для сбора мусора, когда JVM определяет, что это время. – Kon

+0

«Я думаю, что у меня плохое представление» - что ты там делаешь? Добавление и удаление миллиардов элементов? Бьюсь об заклад, вы не – AdamSkywalker

ответ

2

Направьте его на новую ссылку? Это вызовет GC? В Android-телефоне GC не так хорош.

Это не будет. Обычно GC выполняется, когда памяти для размещения новых объектов недостаточно.

call arraylist.clear(). Вызывает ли я сам вызов GC для освобождения памяти ?

Снова нет. Очистка списка приведет к удалению ссылок из списка на элементы, вот и все. Фактический GC будет выполняться по мере необходимости.

Как насчет того, если аррайалист действительно огромен? Я думаю, что у чистых есть плохие показатели , когда архаист огромен. Так что лучше указать на новую ссылку и просто позволить GC выполнить свою работу?

Сложность времени clear() - O (n). Указанием ссылки на другой список массивов является O (1). Так что да, это быстрее, но я никогда не видел этого в реальных приложениях.

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