Java BigDecimal 内存使用情况?
2022-09-01 21:04:52
是否有估计 的内存量的准则?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
用于存储规范字符串表示形式(如果已计算)。
假设你不调用 ,它将保持零字节。因此是 (8+4+4)=16 字节 + 。.toString()
BigDecimal
BigInteger
BigInteger
本身是 4+4+4+4+4=20 字节 + 。mag
20+16 表示总共 36 个字节加上幅度,这始终是表示完整整数所需的最小位数。对于一个数字,它将需要位,可以转换为int。您应该使用关于:n
log2(n)
36 + Ceiling(log2(n)/8.0) bytes
(请注意,这不包括任何其他对象描述符开销,就像字符串的示例链接一样,但它应该给你一个很好的一般想法。
如果你深入研究 的内部结构,你会发现,如果有效位数为 <= ,则它使用紧致表示。因此,内存使用情况可能会有所不同,具体取决于您表示的实际值。BigDecimal
Long.MAX_VALUE