Java BigDecimal内存使用情况?

是否有估计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它会使用紧凑的表示Long.MAX_VALUE 。 因此,内存使用量可能会根据您所代表的实际值而有所不同。