Volevo utilizzare uno HashSet<Long>
per archiviare una grande lista di numeri univoci in memoria. Ho calcolato la memoria approssimativa da consumare (nella dimensione del puntatore a 64 bit):Quanta memoria Java HashSet dovrebbe richiedere
lungo richiederebbe 16 byte di spazio. Quindi inizialmente ho moltiplicato il numero di voci con 16 per ottenere la memoria. Ma in realtà, la memoria era molto più di 16 byte per voce. Successivamente ho studiato l'implementazione di HashSet
. In breve, nell'implementazione sottostante, memorizza in realtà un oggetto fittizio extra (12 byte) con ogni voce di hashset. E un puntatore (8 byte) alla voce successiva. Così concedendo 12 + 8 byte aggiuntivi per entrata.
Dunque memoria totale per voce: 16 + 12 + 8 = 36 byte. Ma ancora quando ho eseguito il codice e controllato la memoria, era ancora molto più di 36 byte per voce.
La mia domanda (In breve): Quanta memoria ha un HashSet
(per esempio, su una macchina a 64 bit)?
Hai dimenticato di prendere in considerazione la capacità. –
sembra dimenticarsi dell'uso della memoria JVM – nafas
http://java-performance.info/memory-consumption-of-java-data-types-2/ – nafas