Java BigDecimal 内存使用情况?

2022-09-01 21:04:52

是否有估计 的内存量的准则?BigDecimal

查找类似于这些准则的内容,以估计内存使用情况。String


答案 1

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

用于存储规范字符串表示形式(如果已计算)。

假设你不调用 ,它将保持零字节。因此是 (8+4+4)=16 字节 + 。.toString()BigDecimalBigInteger

BigInteger本身是 4+4+4+4+4=20 字节 + 。mag

20+16 表示总共 36 个字节加上幅度,这始终是表示完整整数所需的最小位数。对于一个数字,它将需要位,可以转换为int。您应该使用关于:nlog2(n)

36 + Ceiling(log2(n)/8.0) bytes

(请注意,这不包括任何其他对象描述符开销,就像字符串的示例链接一样,但它应该给你一个很好的一般想法。


答案 2

如果你深入研究 的内部结构,你会发现,如果有效位数为 <= ,则它使用紧致表示。因此,内存使用情况可能会有所不同,具体取决于您表示的实际值。BigDecimalLong.MAX_VALUE