23

是否有估算 a 消耗的内存量的指南BigDecimal

寻找与这些准则类似的东西来估计String内存使用情况。

4

2 回答 2

23

如果您查看源代码中的字段,则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

(请注意,这不包括任何其他对象描述符开销,因为您的字符串示例链接确实如此,但它应该给您一个很好的总体思路。)

于 2010-03-23T15:48:31.297 回答
2

如果您深入了解其内部结构,BigDecimal您会发现如果有效数字为 <= ,它会使用紧凑的表示Long.MAX_VALUE。因此,内存使用量可能会根据您所代表的实际值而有所不同。

于 2010-03-23T15:42:27.567 回答