Java BigDecimal内存使用情况?

Mar*_*eon 20 java memory memory-management bigdecimal

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

寻找与这些指南类似的内容来估算String内存使用情况.

M. *_*sup 21

如果你查看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 +?
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

  • 请记住,'stringCache' 和 'intVal' 将具有引用指针(jvm impl 依赖 4 或 8 个字节)。还要记住最小 12 字节的对象头开销('BigInteger' 和 'BigDecimal',int[]),最后是 8 字节对齐(向上取整)所有对象大小。 (2认同)