是否有估算 a 消耗的内存量的指南BigDecimal
?
寻找与这些准则类似的东西来估计String
内存使用情况。
是否有估算 a 消耗的内存量的指南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)
位,可以转换为整数。你应该使用关于:
36 + Ceiling(log2(n)/8.0) bytes
(请注意,这不包括任何其他对象描述符开销,因为您的字符串示例链接确实如此,但它应该给您一个很好的总体思路。)
如果您深入了解其内部结构,BigDecimal
您会发现如果有效数字为 <= ,它会使用紧凑的表示Long.MAX_VALUE
。因此,内存使用量可能会根据您所代表的实际值而有所不同。