¿Existe una guía para estimar la cantidad de memoria consumida por un BigDecimal
?Uso de la memoria Java BigDecimal?
Buscando algo similar a estos guidelines para estimar String
uso de memoria.
¿Existe una guía para estimar la cantidad de memoria consumida por un BigDecimal
?Uso de la memoria Java BigDecimal?
Buscando algo similar a estos guidelines para estimar String
uso de memoria.
Si nos fijamos en los campos de la fuente de BigDecimal existe:
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 +?
El comentario para stringCache "se utiliza para almacenar la representación de cadena canónica, si se calcula.", Por lo que suponiendo que usted don' Para llamar a String lo dejamos como cero bytes, por lo que en total hay (8 + 4 + 4) = 16 bytes + BigInteger en BigDecimal y 4 + 4 + 4 + 4 + 4 = 20 bytes + mag para BigInteger. Entonces un total de 36 bytes más la magnitud. Por lo que puedo decir, la magnitud es siempre el número mínimo de bits necesarios para representar el entero completo, por lo que para un número n necesitará log2 (n) bits, que se pueden convertir en enteros. Así que, en general, usted debe utilizar sobre:
36 + Ceiling(log2(n)/8.0) bytes
(tenga en cuenta que esto no incluye ninguno de los otros gastos generales descriptor de objeto como su ejemplo de enlace para las cadenas no, pero debe darle una buena idea general.)
Tenga en cuenta que 'stringCache' e 'intVal' tendrán punteros de referencia (jvm impl depende de 4 u 8 bytes). Recuerde también la tara del encabezado del objeto mínimo de 12 bytes ('BigInteger' y 'BigDecimal', int []) y finalmente 8byte alinean (redondean) todos los tamaños de objeto. –
s/Cieling/Techo / – thisfred
Si profundiza en las partes internas de BigDecimal
, verá que utiliza una representación compacta si el significado es < = Long.MAX_VALUE
. Por lo tanto, el uso de la memoria puede variar según los valores reales que está representando.
¿Qué es la representación compacta? –
Casi lo mismo con una constante más grande. Por supuesto, como 'String', depende de la implementación. –
¿Has leído este: http://www.javaworld.com/javaworld/javatips/jw-javatip130.html – PeterMmm