Rozważmy follwing kod HashMap.clear()
:Czy pamięć Java HashMap.clear() i remove() jest skuteczna?
/**
* 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;
}
Wydaje się, że tablica wewnętrzna (table
) od Entry
przedmiotów nigdy się kurczyły. Tak więc, kiedy dodaję 10000 elementów do mapy, a po tym wywołaniu map.clear()
, zachowa ona 10000 zer w wewnętrznej tablicy. Moje pytanie brzmi: w jaki sposób JVM radzi sobie z tą tablicą nici, a co za tym idzie, czy pamięć jest efektywna?
10 000 wartości zerowych zajmuje całe 40 KB (być może 80 na 64-bitowej maszynie JVM). –
@Michael, być może, ale to nie ma znaczenia: numer można rozszerzyć na dowolną skalę. PO zadaje zasadę. Może mapa jest ogromna, może dostępna pamięć jest mała. Nie wiemy. – corsiKa
10000 elementów na mapie! = 10000 wpisów w wewnętrznej tabeli. proszę się dowiedzieć, jak działa HashMap imp ... – james