是否有一个指南来估算BigDecimal
占用的内存量?希望找到类似于这些指南,用于估算String
的内存使用情况。
是否有一个指南来估算BigDecimal
占用的内存量?希望找到类似于这些指南,用于估算String
的内存使用情况。
如果您查看BigDecimal
的源代码中的字段,则会发现:
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 +?
stringCache
的注释是:
如果计算了,用于存储规范字符串表示。
假设您不调用.toString()
,它将保持零字节。 因此,BigDecimal
为(8+4+4)=16字节+BigInteger
。
BigInteger
本身为4+4+4+4+4=20字节+mag
。
20+16共计36字节加上幅度,其始终为表示完整整数所需的最小位数。 对于数字n
,它需要log2(n)
位,可以转换为int。 您应该使用大约:
36 + Ceiling(log2(n)/8.0) bytes
(请注意,这不包括您在字符串示例链接中看到的任何其他对象描述符开销,但它应该为您提供一个良好的一般性概念。)
如果你深入了解BigDecimal
的内部结构,你会发现如果尾数小于或等于Long.MAX_VALUE
,则其使用紧凑的表示方式。因此,实际所表示的值不同,内存使用量也会有所变化。