Si consideri il codice di HashMap.clear()
follwing:La memoria Java HashMap.clear() e remove() è efficace?
/**
* 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;
}
Sembra, che la matrice interna (table
) di Entry
oggetti non è mai shrinked. Quindi, quando aggiungo 10000 elementi a una mappa, e dopo quella chiamata map.clear()
, manterrà 10000 null nella sua matrice interna. Quindi, la mia domanda è: in che modo JVM gestisce questo array di nulla e, quindi, la memoria dello HashMap
è efficace?
10.000 null occupano tutti i 40 KB (possibilmente 80 su una JVM a 64 bit). –
@ Michael, forse, ma è irrilevante: il numero può essere esteso a qualsiasi scala. OP sta chiedendo su una questione di principio. Forse la mappa è enorme, forse la memoria disponibile è piccola. Non lo sappiamo – corsiKa
10000 elementi nella mappa! = 10000 voci nella tabella interna. per favore scopri come funziona l'impl di HashMap ... – james