如果您查看源代码中的字段,则
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(),它将保留为零字节。因此
BigDecimal是(8 + 4 + 4)= 16个字节+
BigInteger。
BigInteger本身是4 + 4 + 4 + 4 + 4 = 20字节+
mag。
20 +
16总共提供了36个字节加上大小,该大小始终是表示完整整数所需的最小位数。对于数字
n,它将需要一些
log2(n)位,可以将其转换为整数。您应该使用关于:
36 + Ceiling(log2(n)/8.0) bytes
(请注意,这不像您的示例字符串链接那样包含任何其他对象描述符开销,但是它应该给您一个很好的总体思路。)



