Esiste una linea guida per stimare la quantità di memoria consumata da un BigDecimal
?Utilizzo della memoria Java BigDecimal?
Cercare qualcosa di simile a questi guidelines per stimare l'utilizzo della memoria String
.
Esiste una linea guida per stimare la quantità di memoria consumata da un BigDecimal
?Utilizzo della memoria Java BigDecimal?
Cercare qualcosa di simile a questi guidelines per stimare l'utilizzo della memoria String
.
Se guardate i campi nella sorgente per BigDecimal c'è:
BigDecimal:
long intCompact +8 bytes
int precision +4 bytes
int scale +4 bytes
String stringCache +?
BigInteger intVal +?
BigInteger:
int bitCount +4 bytes
int bitLength +4 bytes
int firstNonzeroIntNum +4 bytes
int lowestSetBit +4 bytes
int signum +4 bytes
int[] mag +?
Il commento per stringCache è "Usato per memorizzare la rappresentazione di stringa canonica, se calcolata.", Assumendo così che don' t chiama toString lasciandolo come zero byte, quindi in totale ci sono (8 + 4 + 4) = 16 byte + BigInteger in BigDecimal e 4 + 4 + 4 + 4 + 4 = 20 byte + mag per BigInteger. Quindi un totale di 36 byte più la magnitudine. Per quanto ne so, la magnitudine è sempre il numero minimo di bit necessario per rappresentare l'intero intero, quindi per un numero n occorreranno i bit log2 (n), che possono essere convertiti in interi. Quindi, in generale, si dovrebbe utilizzare su:
36 + Ceiling(log2(n)/8.0) bytes
(notare che questo non include nessuna delle altre spese oggetto descrittore come il vostro collegamento ad esempio per le stringhe non, ma dovrebbe darvi una buona idea generale.)
Ricordare che 'stringCache' e 'intVal' avranno puntatori di riferimento (jvm impl dipendente da 4 o 8 byte). Ricorda anche l'overhead di intestazione dell'oggetto min 12byte ('BigInteger' e 'BigDecimal', int []) e infine 8byte allinea (arrotonda per eccesso) tutte le dimensioni degli oggetti. –
s/Cieling/Soffitto / – thisfred
Se si scava nell'interno di BigDecimal
vedrai che usa una rappresentazione compatta se il significato è < = Long.MAX_VALUE
. Quindi, l'utilizzo della memoria può variare in base ai valori effettivi che si rappresentano.
Qual è la rappresentazione compatta? –
Molto lo stesso con una costante più grande. Naturalmente, come 'String', dipende dall'implementazione. –
Hai letto questo: http://www.javaworld.com/javaworld/javatips/jw-javatip130.html – PeterMmm