Если я не ошибаюсь, ArrayList содержит значение мест памяти, в которых хранятся переменные, добавленные в список. Итак, мое предположение заключается в том, что когда вы вызываете метод ArrayList.clear(), он освобождает только вышеупомянутые значения (расположения памяти), но не освобождает эти места памяти. Я попытаюсь проиллюстрировать это на примере:
Скажем, у вас есть текущий статус памяти:
[Memory location] (type of variable) *value*
[1000] (int) 32
[1002] (int) 12
[1003] (float) 2.5
И вы добавляете их в список myList, поэтому он содержит указатели на ячейки памяти 1000, 1002, 1003.
Когда вы вызываете myList.clear(), указатели будут аннулированы, но ячейки 1000, 1002, 1003 памяти будут содержать ранее заданные значения. Я не прав?