Java: How ArrayList memory management

Posted by cka3o4nik on Stack Overflow See other posts from Stack Overflow or by cka3o4nik
Published on 2010-04-20T07:40:35Z Indexed on 2010/04/20 7:43 UTC
Read the original article Hit count: 143

Filed under:
|
|

In my Data Structures class we have studies the Java ArrayList class, and how it grows the underlying array when a user adds more elements. That is understood. However, I cannot figure out how exactly this class frees up memory when lots of elements are removed from the list. Looking at the source, there are three methods that remove elements:

[code] public E remove(int index) { RangeCheck(index);

modCount++; E oldValue = (E) elementData[index];

int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work

return oldValue; }

public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; }

private void fastRemove(int index) { modCount++; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work } {/code]

None of them reduce the datastore array. I even started questioning if memory free up ever happens, but empirical tests show that it does. So there must be some other way it is done, but where and how? I checked the parent classes as well with no success.

© Stack Overflow or respective owner

Related posts about java

Related posts about memory