如果您查看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字节BigInteger在BigDecimal中为4×4 4 4 = 20字节,为BigInteger。所以共有36个字节加上大小。据我所知,幅度总是表示整数所需的最小位数,所以对于数字n,它将需要log2(n)位,可以将其转换为int。所以一般来说你应该使用:
36 + Cieling(log2(n)/8.0) bytes
(注意,这不包括任何其他对象描述符开销,因为您的字符串的示例链接,但它应该给你一个很好的一般想法。)