Java BigDecimal内存使用情况?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (54)

有没有一个指导方针来估计一个内存消耗量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,我们将把它保留为零字节,所以总共有(8 + 4 + 4)= 16 BigDecimal中的字节+ BigInteger和BigInteger中的4 + 4 + 4 + 4 + 4 = 20字节+ mag。所以总共有36个字节加上这个数量级。据我所知,幅度始终是表示整个整数所需的最小位数,因此对于数字n,它将需要log2(n)位,可将其转换为整数。所以一般来说你应该使用about:

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

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

用户回答回答于

如果你深入到内部,BigDecimal你会发现如果有效数是<=,它会使用紧凑的表示Long.MAX_VALUE。因此,内存使用情况可能会因您所代表的实际值而异。

扫码关注云+社区