Consider the follwing HashMap.clear() code:
/**
* Removes all of the mappings from this map.
* The map will be empty after this call returns.
*/
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
It seems, that the internal array (table) of Entry objects is never shrinked. So, when I add 10000 elements to a map, and after that call map.clear(), it will keep 10000 nulls in it’s internal array. So, my question is, how does JVM handle this array of nothing, and thus, is HashMap memory effective?
The idea is that
clear()is only called when you want to re-use theHashMap. Reusing an object should only be done for the same reason it was used before, so chances are that you’ll have roughly the same number of entries. To avoid useless shrinking and resizing of theMapthe capacity is held the same whenclear()is called.If all you want to do is discard the data in the
Map, then you need not (and in fact should not) callclear()on it, but simply clear all references to theMapitself, in which case it will be garbage collected eventually.